启动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
上打印。如何重新开启STDERR
(open(STDERR, ">", \*STDERR);
没有帮助?)
答案 0 :(得分:2)
如果您不希望应用程序记录任何内容,可以将日志记录引擎更改为使用Dancer2::Logger::Null。您可以通过编辑 config.yml 或在您的某个环境中执行此操作。例如,要在producion中将其关闭,请更改#appdir / environments / production.yml 。
logger: 'null'
默认情况下是日志引擎'console'
,它会将内容打印到您的终端。
还有其他的Dancer2 :: Logger ::类bundled with Dancer2和CPAN in their own distributions。将所有内容转储到黑洞中的更好解决方案可能是登录到文件。有关如何进一步配置的文档可以在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";
就是这样。它会自动处理换行等问题。
答案 1 :(得分:0)