我使用Log::Log4perl创建日志文件,但它附加到单个日志文件中; 相反,我想为每次执行我的脚本创建一个单独的日志文件。
如何创建单独的日志文件?
这是我的代码:
fetch.pl
#Opening Log configuration file
Log::Log4perl::init('./logs/log4perl.conf');
my $logger = Log::Log4perl->get_logger('./logs_$$.logs');
logs.conf
log4perl.logger = TRACE, FileAppndr1
log4perl.logger.logs = DEBUG, FileAppndr1
log4perl.appender.FileAppndr1 = Log::Log4perl::Appender::File
log4perl.appender.FileAppndr1.filename = logs.log
log4perl.appender.FileAppndr1.layout = Log::Log4perl::Layout::SimpleLayout
答案 0 :(得分:2)
要在字符串中获取变量插值,您必须使用双引号:
my $logger = Log::Log4perl->get_logger("./logs_$$.logs");
或串联:
my $logger = Log::Log4perl->get_logger('./logs_' . $$ . '.logs');
答案 1 :(得分:1)
日志文件名在配置文件中设置,而不是在get_logger()
的调用中。因此,您需要了解如何在配置文件中使用变量。 Log4Perl FAQ包含问题“What if I need dynamic values in a static Log4perl configuration file?”
答案的重要部分是:
从Log :: Log4perl 0.28开始,配置文件中的每个值都可以 指定为Perl钩子。所以,而不是说
log4perl.appender.Logfile.filename = test.log
你也可以让Perl子程序传递价值 动态:
log4perl.appender.Logfile.filename = sub { logfile(); };
鉴于logfile()是主包中的有效函数 返回包含日志文件路径的字符串。
所以看起来你想要:
log4perl.appender.FileAppndr1.filename = sub { "logs_$$.log" };