我想在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,因为返回值非常简单。
以字符串
sub {...
开头的每个值都被解释为在应用程序解析配置时要执行的Perl代码...
所以我尝试了类似的东西,但它不起作用:
log4perl.appender.av_std_LOGFILE.filename=\
sub { print "$av_std_LOGFILE"; }
有没有办法在我的脚本中没有sub的情况下获取变量的结果?
答案 0 :(得分:4)
print
成功返回1,所以
sub { print "$av_std_LOGFILE"; }
返回1,而不是$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';
通常,你应该避免全局变量,所以我更喜欢使用子程序。