用 Java 的很少有人对 log4j 感觉陌生,这是 Apache 上的项目。同时 Apache 上也有针对其他语言的 Log 组件,如 log4cxx、log4net、log4php。
所用 Perl 时也会想想:Perl 该用什么日志模块呢? log4perl?google 一下果然后,只不过它不是由 Apache 出品。
该项目原来在 http://log4perl.sourceforge.net/,现已移到 http://mschilli.github.com/log4perl/。
下载地址:http://search.cpan.org/~mschilli/Log-Log4perl/ (要编译的)
使用文档:1. Tutorial(Retire your debugger, log smartly with Log::Log4perl)
2. Manual
3. Frequently Asked Questions
当然,你也可以用 CPAN 和 PPM(如果安装的是 ActivePerl) 来安装 Log::Log4perl 模块。
若能用 nmake 构建的话可用 perl -MCPAN -e "install Log::Log4perl" 下载安装 Log::Log4perl
ActivePerl 可用:ppm install "http://log4perl.sourceforge.net/ppm/Log-Log4perl.ppd" 安装(参考它的 FAQ)
下面是使用方法,所有的概念,如 Appender、Layout、LogLevel、Category 等的概念与 log4j 基本或者说完全一致。所以只要有 log4j、log4cxx、log4net 或 log4php 其中一个组件的使用经验,那么 log4perl 的使用方式你会觉得十分自然舒适。
好了,就是使用代码和配置文件, 以及瞧瞧代码中如何初始化配置文件的。
代码 TestLog4perl.pl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#所有 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() 试试效果。
更多内容
我们可以在下载页面 http://search.cpan.org/~mschilli/Log-Log4perl/ 看到 log4perl 的各个子模块,大概能了解到 log4perl 还支持哪些功能。如 日志输出到数据库、输出到 Socket、可使用 XML 配置文件、自动侦测配置文件的内容变化、与 Java 的 log4j 配合使用(例如,支持 NT 事件日志、回滚文件、JDBC 等) 等等等。
ActivePerl 5.8.* 以上还可用的安装方法:
ppm> repository add http://log4perl.sourceforge.net/ppm
ppm> install Log-Log4perl
Log4perl 能支持的日志输出级别有 DEBUG|INFO|WARN|ERROR|FATAL|TRACE|ALL|OFF。
更详细的使用说明请参考 Log4perl 的官方帮助,见文后参考中的链接。
参考:1. log4perl 简单使用方法
2. Tutorial(Retire your debugger, log smartly with Log::Log4perl)
3. Manual
4. Frequently Asked Questions
本文链接 https://yanbin.blog/perl-log4perl-user-guide/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。