您的位置:首页 > 其它

关于log4j多文件打印使用技巧

2013-06-27 15:03 190 查看
log4j的好处在于:

1.通过修改配置文件,就可以决定log信息输出到何处(console,文件,...),是否输出。这样,在系统开发阶段可以打印详细的log信息以跟踪系统运行情况,而在系统稳定后可以关闭log输出,从而在能跟踪系统运行情况的同时,又减少了垃圾代码(System.out.println(...)等)。

2.使用log4j,需要整个系统有一个统一的log机制,有利于系统的规划。

3.log4j的使用本身很简单。但合理地规划一个系统的统一log机制需要周全的考虑。

 一、定义配置文件

 Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。下面我们介绍使用Java特性文件做为配置文件的方法:

1. 配置根Logger,其语法为:

  log4j.rootLogger = [ level ] , appenderName, appenderName,…

 其中,level是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。

  2. 配置日志信息输出目的地Appender,其语法为:

log4j.appender.appenderName =fully.qualified.name.of.appender.class

  log4j.appender.appenderName.option1 = value1

  …

  log4j.appender.appenderName.option = valueN

其中,Log4j提供的appender有以下几种:

  org.apache.log4j.ConsoleAppender(控制台)

  org.apache.log4j.FileAppender(文件)

  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3. 配置日志信息的格式(布局),其语法为:

log4j.appender.appenderName.layout =fully.qualified.name.of.layout.class

  log4j.appender.appenderName.layout.option1 = value1

  …

  log4j.appender.appenderName.layout.option = valueN

 其中,Log4j提供的layout有以下几种:

  org.apache.log4j.HTMLLayout(以HTML表格形式布局),

  org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

  org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

  org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:%m 输出代码中指定的消息

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

  %r 输出自应用启动到输出该log信息耗费的毫秒数

  %c 输出所属的类目,通常就是所在类的全名

  %t 输出产生该日志事件的线程名

  %n输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”

  %d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyMMM dd HH:mm:ss,SSS},输出类似:2002年10月18日22:10:28,921

  %l输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

二、在代码中使用Log4j

1. 初始化logg4j

在使用log4j前,要先初始化log4j的配置文件。如果在系统的classpath中存在log4j.properties,则系统自动会找到log4j的配置文件进行初始化,如果系统所使用的配置文件不是默认的log4j.properties,或者是配置文件不在系统的classpath中,则需要在代码中明确地初始化log4j。其语法为:

BasicConfigurator.configure ():自动快速地使用缺省Log4j环境。

PropertyConfigurator.configure ( String configFilename):读取使用Java的特性文件编写的配置文件。

DOMConfigurator.configure ( String filename ):读取XML形式的配置文件。

示例如下,在系统启动时执行一次,之后就不再执行。

String logFile=

(String)ServiceLocator.getInstance().getOne("CommuServerLog4j");

//从系统配置文件中获得log4j的配置文件

if (logFile != null) {

if(logFile.toString().toLowerCase().endsWith(".xml")) {

DOMConfigurator.configure(logFile);

} else{

PropertyConfigurator.configure(logFile);

}

2.得到记录器

 使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:

  public static Logger getLogger( String name)

 通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:

  private static Logger logger =Logger.getLogger(BaseAction.class);

3.插入记录信息(格式化日志信息)

 当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:

Logger.debug ( Object message ) ;

  Logger.info ( Object message ) ;

  Logger.warn ( Object message ) ;

  Logger.error ( Object message ) ;

4.多文件打印

根据开发的需要将不同的包名下的日志打到不同的地方,使得系统各个层次(如表示层,业务逻辑层,数据访问层等)的日志得以分开,不同的开发人员只关心相关的日志文件。在log4j.properties文件中做如下配置:

log4j.category.com=DEBUG,A1

log4j.category.org=ERROR,A2

说明:com包下面的的日志等级是DEBUG,打到A1这个地方,org包下面的的日志等级是ERROR,打到A2这个地方。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: