【问题标题】:Log4perl configuration is not workingLog4perl 配置不起作用
【发布时间】:2012-12-08 00:25:25
【问题描述】:

我在我的 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 脚本中(每个脚本使用不同的附加程序和不同日志文件的日志):

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.");

即使每个脚本使用不同的附加程序并记录到不同的文件,它们都应该具有相同的行为:

  • 每个日志每天轮换一次,旧的(轮换的)日志会被删除

我已经让这个脚本运行了超过 24 小时,我没有看到在/my/logs/ 下生成任何日志。

所以我问:我的log4perl.conf 不正确吗?如果不是,我可以做些什么来诊断问题?我是否在 perl 脚本中错误地初始化了库?提前致谢。

【问题讨论】:

  • 我还应该注意,我安装了主要的 Log4perl 模块,所以如果Log::Dispatch::FileRotate 不是Log4perl 的一部分,那么我会说这显然是它。但是,我已经阅读了建议这两种方式的在线文档,所以我对是否需要安装其他任何东西感到困惑......
  • 如果您将use strictuse warnings 添加到您的示例代码然后只运行它,您会在屏幕上看到什么错误?

标签: linux perl logging log4perl


【解决方案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 文件进行的测试。我已经创建了您的 Perl 脚本的 2 个副本:

  • log4perl_Buzz.pl
  • log4perl_Fizz.pl

我在脚本中添加了一个循环,以便他们每秒将一条消息记录到各自的日志文件中:

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

这些是解决这个问题的有用资源:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    相关资源
    最近更新 更多