关于-Perl-模块-Log::Log4perl

介绍

Log::Log4perl 提供了一个强大的 logging API.

配置

其有两种配置方式:

  • 配置文件
  • Perl commands

对于配置文件方式:

1
2
use Log::Log4perl;
Log::Log4perl->init("log.conf");

log.conf 文件的内容为:

1
2
3
4
5
6
7
8
9
10
11
12
############################################################
# A simple root logger with a Log::Log4perl::Appender::File
# file appender in Perl.
############################################################
log4perl.rootLogger=ERROR, LOGFILE

log4perl.appender.LOGFILE=Log::Log4perl::Appender::File
log4perl.appender.LOGFILE.filename=/var/log/myerrs.log
log4perl.appender.LOGFILE.mode=append

log4perl.appender.LOGFILE.layout=PatternLayout
log4perl.appender.LOGFILE.layout.ConversionPattern=[%r] %F %L %c - %m%n

此时日志的格式如:

1
[millisecs] source-filename line-number class - message newline

之后获取一个 logger 则可使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package My::MegaPackage;
use Log::Log4perl;

sub some_method {
my($param) = @_;

my $log = Log::Log4perl->get_logger("My::MegaPackage");

$log->debug("Debug message");
$log->info("Info message");
$log->error("Error message");

...
}

由于之前设置的 log level 为 error, 因此这里只有 error 的输出会写入 log 文件.

Log Levels

有六个预定义的 log levels:

  • FATAL
  • ERROR
  • WARN
  • INFO
  • DEBUG
  • TRACE

如果设置的 log level 为 WARN, 则 info(), debug(), trace() 的输出会被忽略, 其 level 以上的会被记录.

有两种调用方式, 一个是直接调用方法:

1
2
3
4
5
6
$logger->trace("...");  # Log a trace message
$logger->debug("..."); # Log a debug message
$logger->info("..."); # Log a info message
$logger->warn("..."); # Log a warn message
$logger->error("..."); # Log a error message
$logger->fatal("..."); # Log a fatal message

另一个是使用常量来指定:

1
2
3
4
5
6
$logger->log($TRACE, "...");
$logger->log($DEBUG, "...");
$logger->log($INFO, "...");
$logger->log($WARN, "...");
$logger->log($ERROR, "...");
$logger->log($FATAL, "...");

后一种其实比较灵活, 可以动态确定, 比如:

1
$logger->log( $exit_level{ $rc }, "...");

查看当前的 log level

1
2
3
4
5
6
$logger->is_trace()    # True if trace messages would go through
$logger->is_debug() # True if debug messages would go through
$logger->is_info() # True if info messages would go through
$logger->is_warn() # True if warn messages would go through
$logger->is_error() # True if error messages would go through
$logger->is_fatal() # True if fatal messages would go through

当前 level 及以上都是返回 true.

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/perl
use strict;
use warnings;
use Log::Log4perl;

# 配置日志
my $conf = q(
log4perl.rootLogger = DEBUG, LOGFILE

log4perl.appender.LOGFILE = Log::Log4perl::Appender::File
log4perl.appender.LOGFILE.filename = logfile.log
log4perl.appender.LOGFILE.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.LOGFILE.layout.ConversionPattern = %d{ISO8601} %p %m%n
);

Log::Log4perl::init(\$conf);

my $logger = Log::Log4perl->get_logger();

$logger->debug("这是一个 DEBUG 日志信息");
$logger->info("这是一个 INFO 日志信息");
$logger->warn("这是一个 WARN 日志信息");
$logger->error("这是一个 ERROR 日志信息");
$logger->fatal("这是一个 FATAL 日志信息");

关于-Perl-模块-Log::Log4perl
http://example.com/2022/12/03/关于-Perl-模块-Log::Log4perl/
作者
Jie
发布于
2022年12月3日
许可协议