我在我的Linux机器上安装了Log4perl并具有以下/path/to/log4perl.conf
:
log4perl.logger.Fizz = INFO, FizzAppender
log4perl.logger.Buzz = INFO, BuzzAppender
log4perl.appender.FizzAppender = Log::Dispatch::FileRotate
log4perl.appender.FizzAppender.filename = /my/logs/fizz-log.txt
log4perl.appender.FizzAppender.max = 1
log4perl.appender.FizzAppender.DatePattern = yyyy-MM-dd
log4perl.appender.FizzAppender.TZ = EST
log4perl.appender.FizzAppender.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.FizzAppender.layout.ConversionPattern = %d %m %n
log4perl.appender.BuzzAppender = Log::Dispatch::FileRotate
log4perl.appender.BuzzAppender.filename = /my/logs/buzz-log.txt
log4perl.appender.BuzzAppender.max = 1
log4perl.appender.BuzzAppender.DatePattern = yyyy-MM-dd
log4perl.appender.BuzzAppender.TZ = EST
log4perl.appender.BuzzAppender.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.BuzzAppender.layout.ConversionPattern = %d %m %n
在我的每个perl脚本中(每个脚本使用不同的appender和日志到不同的日志文件):
use Log::Log4perl;
my $log_conf = "/path/to/log4perl.conf";
Log::Log4perl::init($log_conf);
# In one script the logger is a "Fizz" logger (like below), and in the other
# script the logger is a "Buzz" logger.
my $logger = Log::Log4perl->get_logger("Fizz");
$logger->info("This should work.");
即使每个脚本使用不同的appender并记录到不同的文件,它们都应该具有相同的行为:
我已经让这个脚本运行了超过24小时,我没有看到在/my/logs/
下生成任何日志。
所以我问:是我的log4perl.conf
不正确?如果没有,我该怎么做才能诊断问题?我是否在perl脚本中错误地初始化了库?提前谢谢。
答案 0 :(得分:1)
我认为您需要将参数mode
添加到log4perl.conf
文件中:
log4perl.appender.FizzAppender.mode = truncate
log4perl.appender.BuzzAppender.mode = truncate
为了加快速度,我已将DatePattern更改为以下内容:
log4perl.appender.FizzAppender.DatePattern = yyyy-MM-dd-HH-MM
log4perl.appender.BuzzAppender.DatePattern = yyyy-MM-dd-HH-MM
这是使用log4perl.conf
文件的测试。我已经创建了2份Perl
脚本:
我在脚本中添加了一个循环,以便每秒将消息记录到各自的日志文件中:
while (1) {
$logger->info("This should work.");
sleep 1;
}
我同时运行它们,并使用watch ls -l
:
Every 2.0s: ls -l Thu Dec 20 21:16:51 2012
total 12
-rwxrwxr-x 1 saml saml 358 Dec 20 20:15 log4perl_Buzz.pl
-rw-rw-r-- 1 saml saml 978 Dec 20 21:07 log4perl.conf
-rwxrwxr-x 1 saml saml 358 Dec 20 20:15 log4perl_Fizz.pl
运行2个脚本后:
Every 2.0s: ls -l Thu Dec 20 21:17:56 2012
total 20
-rw-rw-r-- 1 saml saml 39 Dec 20 21:17 buzz-log.txt
-rw-rw-r-- 1 saml saml 39 Dec 20 21:17 fizz-log.txt
-rwxrwxr-x 1 saml saml 358 Dec 20 20:15 log4perl_Buzz.pl
-rw-rw-r-- 1 saml saml 978 Dec 20 21:07 log4perl.conf
-rwxrwxr-x 1 saml saml 358 Dec 20 20:15 log4perl_Fizz.pl
经过约2分钟后:
Every 2.0s: ls -l Thu Dec 20 21:19:05 2012
total 28
-rw-rw-r-- 1 saml saml 195 Dec 20 21:19 buzz-log.txt
-rw-rw-r-- 1 saml saml 2340 Dec 20 21:18 buzz-log.txt.1
-rw-rw-r-- 1 saml saml 234 Dec 20 21:19 fizz-log.txt
-rw-rw-r-- 1 saml saml 2301 Dec 20 21:18 fizz-log.txt.1
-rwxrwxr-x 1 saml saml 358 Dec 20 20:15 log4perl_Buzz.pl
-rw-rw-r-- 1 saml saml 978 Dec 20 21:07 log4perl.conf
-rwxrwxr-x 1 saml saml 358 Dec 20 20:15 log4perl_Fizz.pl
这是我的log4perl.conf
版本,适合那些在家玩8 - 的人。
log4perl.logger.Fizz = INFO, FizzAppender
log4perl.logger.Buzz = INFO, BuzzAppender
log4perl.appender.FizzAppender = Log::Dispatch::FileRotate
log4perl.appender.FizzAppender.filename = fizz-log.txt
log4perl.appender.FizzAppender.max = 1
log4perl.appender.FizzAppender.DatePattern = yyyy-MM-dd-HH-MM
log4perl.appender.FizzAppender.TZ = EST
log4perl.appender.FizzAppender.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.FizzAppender.layout.ConversionPattern = %d %m %n
log4perl.appender.FizzAppender.mode = truncate
log4perl.appender.BuzzAppender = Log::Dispatch::FileRotate
log4perl.appender.BuzzAppender.filename = buzz-log.txt
log4perl.appender.BuzzAppender.max = 1
log4perl.appender.BuzzAppender.DatePattern = yyyy-MM-dd-HH-MM
log4perl.appender.BuzzAppender.TZ = EST
log4perl.appender.BuzzAppender.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.BuzzAppender.layout.ConversionPattern = %d %m %n
log4perl.appender.BuzzAppender.mode = truncate
这些是解决这个问题的有用资源: