gpt4 book ai didi

perl - Dancer 中的重定向和恢复 STDERR

转载 作者:行者123 更新时间:2023-12-01 22:17:42 24 4
gpt4 key购买 nike

当启动我的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); 没有帮助)?

最佳答案

如果您不希望应用程序记录任何内容,可以将日志引擎更改为使用 Dancer2::Logger::Null 。您可以通过编辑 config.yml 或在您的环境之一中来完成此操作。例如,要在生产中将其关闭,请更改# appdir/environments/development.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 中内置不同日志级别的原因。

  • 核心
  • 调试
  • 信息
  • 警告
  • 错误

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

由于工作目录可能与生产无关,而仅在开发期间相关,因此您可以使用调试

debug "[PWD] : $pwd";

就是这样。它会自动为您处理换行符等。

关于perl - Dancer 中的重定向和恢复 STDERR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39568819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com