如何在Mojo::Log的format回调中获取Hypnotoad Worker ID?
解决方案
要在Mojo::Log的格式化回调中获取Hypnotoad Worker ID,直接读取Hypnotoad自动设置的**环境变量HYPNOTOAD_WORKER**即可,这个变量的值和标准日志中显示的Worker ID完全一致。
修改后的代码
my $log = Mojo::Log->new(path => $logPath, level => 'debug'); $log->format(\&logFormat); sub logFormat { my ($time, $level, @lines) = @_; my $now = localtime_to_iso8601_datetime({second_precision => 5}, $time); $now =~ s/T/ /; # custom Http Request ID is sent as last line my $httpRequestId = pop(@lines); # 读取Hypnotoad Worker ID,非Hypnotoad环境下用默认值'0'兜底 my $currentWorkerId = $ENV{HYPNOTOAD_WORKER} // '0'; # [2024-06-13 09:36:06.19863] [1] [debug] [123456789] return "\n[$now] [$currentWorkerId] [$level] [$httpRequestId] @lines"; }
补充说明
- Hypnotoad启动每个Worker进程时,会自动为该进程设置
HYPNOTOAD_WORKER环境变量,值为从1开始递增的整数(第一个Worker是1,第二个是2,以此类推)。 - 如果你的代码可能在非Hypnotoad环境下运行(比如开发模式的
morbo),可以用//操作符设置兜底值,避免出现空值。
内容的提问来源于stack exchange,提问作者Michael2000
相关产品推荐
相关产品推荐

