Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59866
  • 博文数量: 27
  • 博客积分: 2040
  • 博客等级: 大尉
  • 技术积分: 265
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-03 17:21
文章分类
文章存档

2010年(14)

2009年(13)

我的朋友

分类:

2009-12-14 04:53:35

Java 的很少有人对 log4j 感觉陌生,这是 Apache  上的项目。同时 Apache 上也有针对其他语言的 Log 组件,如 log4cxxlog4netlog4php

所用 Perl 时也会想想:Perl 该用什么日志模块呢? log4perlgoogle 一下果然后,只不过它不是由 Apache 出品。
该项目原来在 ,现已移到

下载地址: 
使用文档:1.              2.  
             3.

当然,你也可以用 CPAN PPM(如果安装的是 ActivePerl) 来安装 Log::Log4perl 模块。

若能用 nmake 构建的话可用 perl -MCPAN -e "install Log::Log4perl" 下载安装 Log::Log4perl
ActivePerl 可用:ppm install "" 安装(参考它的 FAQ)

下 面是使用方法,所有的概念,如 AppenderLayoutLogLevelCategory 等的概念与 log4j 基本或者说完全一致。所以只要有 log4jlog4cxxlog4net 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.


阅读(1225) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~