2

我正在使用Log::Log4perl创建日志文件,但它附加到单个日志文件;相反,我想为我的脚本的每次执行创建一个单独的日志文件。

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

这是我的代码:

获取.pl

#Opening Log configuration file
Log::Log4perl::init('./logs/log4perl.conf');
my $logger = Log::Log4perl->get_logger('./logs_$$.logs');

日志文件

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
4

2 回答 2

2

要在字符串中获得变量插值,您必须使用双引号:

my $logger = Log::Log4perl->get_logger("./logs_$$.logs");

或串联:

my $logger = Log::Log4perl->get_logger('./logs_' . $$ . '.logs');
于 2014-04-03T10:17:10.323 回答
1

日志文件名称是在配置文件中设置的,而不是在对get_logger(). 所以你需要了解如何在配置文件中使用变量。Log4Perl FAQ包含问题“如果我需要静态 Log4perl 配置文件中的动态值怎么办?

答案的重要部分是:

从 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" };
于 2014-04-03T14:31:39.617 回答