如何创建单独的日志文件?

时间:2014-04-03 09:36:18

标签: perl log4perl

我使用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

2 个答案:

答案 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" };