分类:
2009-12-14 04:53:35
用 Java 的很少有人对
log4j 感觉陌生,这是
Apache 上的项目。同时
Apache 上也有针对其他语言的
Log 组件,如
log4cxx、log4net、log4php。
所用
Perl 时也会想想:Perl
该用什么日志模块呢?
log4perl?google
一下果然后,只不过它不是由
Apache 出品。
该项目原来在
,现已移到
。
下载地址:
使用文档:1.
2.
3.
当然,你也可以用
CPAN 和 PPM(如果安装的是
ActivePerl) 来安装 Log::Log4perl
模块。
若能用
nmake 构建的话可用 perl
-MCPAN -e "install Log::Log4perl" 下载安装
Log::Log4perl
ActivePerl 可用:ppm
install ""
安装(参考它的
FAQ)
下 面是使用方法,所有的概念,如
Appender、Layout、LogLevel、Category
等的概念与 log4j 基本或者说完全一致。所以只要有
log4j、log4cxx、log4net 或
log4php 其中一个组件的使用经验,那么
log4perl
的使用方式你会觉得十分自然舒适。
好了,就是使用代码和配置文件, 以及瞧瞧代码中如何初始化配置文件的。
代码
TestLog4perl.pl
#!/usr/bin/perl -w
use
Log::Log4perl::Level;
use
Log::Log4perl
qw(:easy);
#初始化
log4perl 配制文件
Log::Log4perl->init("log4perl.conf");
#创建
log 实例,
info
并输出信息,模块
Foo:Bar
our
$log
=
Log::Log4perl::get_logger("Foo::Bar");
$log->info("看看,我怎么在屏幕上输出来两次了!
");
#创建
log 实例,
debug
并输出信息,模块
Com::Unmi
my
$log1
=
Log::Log4perl::get_logger("Com::Unmi");
$log1->debug("Where,我打印的信息哪去了!
");
配置文件
log4perl.conf
#所有
DEBUG 以上级别日志输出到日志文件和屏幕
log4perl.logger =
DEBUG,Logfile,Screen
#对于包
Foo::Bar 中
INFO
以上级别日志只输出到屏幕
log4perl.category.Foo.Bar =
INFO,Screen
#配置日志文件
Logfile Appender
log4perl.appender.Logfile =
Log::Log4perl::Appender::File
log4perl.appender.Logfile.filename
= log/test.log
log4perl.appender.Logfile.layout
= Log::Log4perl::Layout::PatternLayout
#%d时间
{后是时间格式
}
#%F 是产立生日志的文件名
%L
是行号
log4perl.appender.Logfile.layout.ConversionPattern
=%d{y/M/d H:m:s:S} [%r] %F %L %m%n
#配置屏幕输出
Screen Appender
log4perl.appender.Screen =
Log::Log4perl::Appender::Screen
log4perl.appender.Screen.stderr
= 0
log4perl.appender.Screen.layout
= Log::Log4perl::Layout::SimpleLayout
#和
log4j 一样,可以单独控制某个包的级别
log4perl.logger.Com.Unmi= ERROR
看看执行 TestLog4perl
的输出
控制台:
INFO
- 看看,我怎么在屏幕上输出来两次了!
INFO
- 看看,我怎么在屏幕上输出来两次了!
log/test.log
中输出:
09/6/10
18:8:14:9 [1919] C:\Users\Unmi\Komodo Workspace\test.pl 11
看看,我怎么在屏幕上输出来两次了!
简要分析
为
什么 $log->info("看看,我怎么被在屏幕输出来两次了!");
的信息在屏幕上输出了两次,是因为
$log 对应的模块是
Foo::Bar,分别应用了配置文件中的
log4perl.logger = DEBUG,Logfile,Screen 和
log4perl.category.Foo.Bar = INFO,Screen 两个
logger。而它只在文件中输出了一次就容易理解了。
而
$log1->debug("Where,我打印的信息哪去了!");
哪儿都没有输出,因为配置文件的最后一行
log4perl.logger.Com.Unmi= ERROR 控制了对应于
Com::Unmi 模块的 $log1 只有
ERROR 级别的日志才会输出,而它是
debug,所以不行,改成
$log1.error() 试试效果。
更多内容
我们可以在下载页面
看
到 log4perl 的各个子模块,大概能了解到
log4perl 还支持哪些功能。如
日志输出到数据库、输出到 Socket、可使用
XML 配置文件、自动侦测配置文件的内容变化、与
Java 的 log4j
配合使用(例如,支持
NT 事件日志、回滚文件、JDBC
等) 等等等。
ActivePerl 5.8.* 以上还可用的安装方法:
ppm>
repository add
ppm>
install Log-Log4perl
Log4perl 能支持的日志输出级别有
DEBUG|INFO|WARN|ERROR|FATAL|TRACE|ALL|OFF。
更详细的使用说明请参考
Log4perl 的官方帮助,见文后参考中的链接。
参考:1.
2. 3.
4.