重定向和还原Dancer中的STDERR

bob_saginowski

启动我的时候http server我不想看到>> Dancer2 v0.201000 server <pid> listening on http://0.0.0.0:<port>印在上面stderr那就是为什么我在致电之前添加了以下行start()

get "/pwd" => sub {
    my $pwd = cwd;
    print STDERR "\n\n[PWD] : $pwd\n"; # this line is not being printed
    print "\n\n[STDOUT::PWD] : $pwd\n";
    my %responseHash = ( pwd => $pwd );
    my $response = encode_json \%responseHash;
    return $response;
};    

my $dancerStartErr;

sub startServer {
    open (local *STDERR, ">", \$dancerStartErr) 
        or die "Dup err to variable error: $!\n";

    start();
}

startServer();

问题是,以后我无法在上打印某些内容STERR如何重新打开STDERRopen(STDERR, ">", \*STDERR);无济于事)?

津巴布韦

如果您不希望应用程序记录任何内容,则可以将记录引擎更改为使用Dancer2 :: Logger :: Null您可以通过编辑config.yml或在其中一种环境中进行操作。例如,要在生产中将其关闭,请更改#appdir / environments / production.yml

logger: 'null'

默认值为日志记录引擎'console',它将内容打印到终端。

还有其他Dancer2 :: Logger ::类可与Dancer2捆绑在一起,在自己的发行版中位于CPAN仅将所有内容转储到黑洞中的更好解决方案可能是登录到文件。可以在Dancer2 :: Core :: Role :: Logger中找到有关如何进一步配置的文档

还要注意STDERR,您应该在适当的日志级别使用日志记录关键字,而不是在代码中打印到

print STDERR "\n\n[PWD] : $pwd\n"; # this line is not being printed

这不是一个好主意,因为您无法区分这是错误,警告还是调试输出。这就是为什么Dancer2内置了不同的日志级别的原因。

  • core
  • debug
  • info
  • warning
  • error

所有这些都可以用作关键字。Dancer2 :: Manual中有关于它的文档

由于工作目录可能与生产无关,而仅与开发相关,因此请使用debug

debug "[PWD] : $pwd";

而已。它会自动处理换行符,并自动为您处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章