如何在 Log::Log4perl 配置文件中使用 Perl 变量?
How can I use a Perl variable in my Log::Log4perl config file?
我想在 Log::Log4perl 配置文件中使用脚本中的 Perl 变量。我阅读了文档,发现我可以使用子例程,但如果可能的话,我想做的更简单一些。
我想为我的 appender 设置文件名:
log4perl.appender.av_std_LOGFILE.filename="whateverfilename.log"
但是这样一来,就是固定值了。
我的脚本中有一个变量的文件名,我想在运行时使用它:
log4perl.appender.av_std_LOGFILE.filename=\
sub { return &av_getLogfileName(); }
这是子程序所在的位置:
sub av_getLogfileName
{
return $av_std_LOGFILE;
}
这可行,但我想避免在我的脚本中使用 sub,因为 return 值非常简单。
Each value starting with the string sub {...
is interpreted as Perl code to be executed at the time the application parses the configuration...
所以我尝试了类似的方法,但没有成功:
log4perl.appender.av_std_LOGFILE.filename=\
sub { print "$av_std_LOGFILE"; }
有没有办法在我的脚本中没有 sub 的情况下获取变量的结果?
print
returns 1 成功,所以
sub { print "$av_std_LOGFILE"; }
returns1,不是$av_std_LOGFILE
的值。您还必须 fully qualify variable names in hooks,这意味着您必须 $av_std_LOGFILE
全局包。
将您的挂钩更改为:
sub { return $main::av_std_LOGFILE; } # double quotes are unnecessary
并像这样在脚本中设置 $av_std_LOGFILE
(在调用 Log::Log4perl::init
之前):
our $av_std_LOGFILE = '/path/to/logfile';
一般来说,你应该避免全局变量,所以我更喜欢使用子程序。
我想在 Log::Log4perl 配置文件中使用脚本中的 Perl 变量。我阅读了文档,发现我可以使用子例程,但如果可能的话,我想做的更简单一些。
我想为我的 appender 设置文件名:
log4perl.appender.av_std_LOGFILE.filename="whateverfilename.log"
但是这样一来,就是固定值了。
我的脚本中有一个变量的文件名,我想在运行时使用它:
log4perl.appender.av_std_LOGFILE.filename=\
sub { return &av_getLogfileName(); }
这是子程序所在的位置:
sub av_getLogfileName
{
return $av_std_LOGFILE;
}
这可行,但我想避免在我的脚本中使用 sub,因为 return 值非常简单。
Each value starting with the string
sub {...
is interpreted as Perl code to be executed at the time the application parses the configuration...
所以我尝试了类似的方法,但没有成功:
log4perl.appender.av_std_LOGFILE.filename=\
sub { print "$av_std_LOGFILE"; }
有没有办法在我的脚本中没有 sub 的情况下获取变量的结果?
print
returns 1 成功,所以
sub { print "$av_std_LOGFILE"; }
returns1,不是$av_std_LOGFILE
的值。您还必须 fully qualify variable names in hooks,这意味着您必须 $av_std_LOGFILE
全局包。
将您的挂钩更改为:
sub { return $main::av_std_LOGFILE; } # double quotes are unnecessary
并像这样在脚本中设置 $av_std_LOGFILE
(在调用 Log::Log4perl::init
之前):
our $av_std_LOGFILE = '/path/to/logfile';
一般来说,你应该避免全局变量,所以我更喜欢使用子程序。