Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1086945
  • 博文数量: 321
  • 博客积分: 7872
  • 博客等级: 少将
  • 技术积分: 2120
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-16 09:06
文章分类

全部博文(321)

文章存档

2017年(1)

2016年(1)

2015年(12)

2014年(17)

2013年(78)

2012年(15)

2011年(17)

2010年(67)

2009年(102)

2008年(11)

分类: LINUX

2010-01-04 10:53:11

原文作者:隔叶黄莺 The Blog of Unmi

〖隔叶黄莺三四声,挂壁飞瀑千万尘。若是人间无净土,此处为何妙语真! 隔叶黄莺四字,本非取自此句,而有寄寓他意,因见妙语,亦与予心合!〗

用 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

 
01.#!/usr/bin/perl -w
02.  
03.use Log::Log4perl::Level;
04.use Log::Log4perl qw(:easy);
05.  
06.#初始化 log4perl 配制文件
07.Log::Log4perl->init("log4perl.conf");
08.  
09.#创建 log 实例,info 并输出信息,模块 Foo:Bar
10.our $log = Log::Log4perl::get_logger("Foo::Bar");
11.$log->info("看看,我怎么在屏幕上输出来两次了!");
12.  
13.#创建 log 实例,debug 并输出信息,模块 Com::Unmi
14.my $log1 = Log::Log4perl::get_logger("Com::Unmi");
15.$log1->debug("Where,我打印的信息哪去了!");

 
配置文件 log4perl.conf

 
01.#所有 DEBUG 以上级别日志输出到日志文件和屏幕
02.log4perl.logger = DEBUG,Logfile,Screen
03.  
04.#对于包 Foo::Bar 中 INFO 以上级别日志只输出到屏幕
05.log4perl.category.Foo.Bar = INFO,Screen
06.  
07.#配置日志文件 Logfile Appender
08.log4perl.appender.Logfile = Log::Log4perl::Appender::File
09.log4perl.appender.Logfile.filename = log/test.log
10.log4perl.appender.Logfile.layout = Log::Log4perl::Layout::PatternLayout
11.  
12.#%d时间{后是时间格式} #%F 是产立生日志的文件名 %L 是行号
13.log4perl.appender.Logfile.layout.ConversionPattern =%d{y/M/d H:m:s:S} [%r] %F %L %m%n 
14.  
15.#配置屏幕输出 Screen Appender
16.log4perl.appender.Screen = Log::Log4perl::Appender::Screen
17.log4perl.appender.Screen.stderr = 0
18.log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout
19.  
20.#和 log4j 一样,可以单独控制某个包的级别
21.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.




[版权声明]
本站内文章,如未特别注明,均系原创或翻译之作,本人 Unmi 保留一切权利。本站原创及译作未经本人许可,不得用于商业用途及传统媒体。网络媒体可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。及此说明,重之之重。
阅读(4106) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~