log4j配置简要说明

  • Post author:
  • Post category:其他


虽然以前一直在用log4j,但是对其配置不甚了了,突然间因为需解决某些问题,要理解log4j的配置,

然而用google搜了一下,却发现网上没有一个简单直观的说明,于是只好看log4j的官方介绍,终于

理解了log4j的配置用法,以下是我对log4j配置的一点认识,如有谬误还请不吝赐教.

首先我们搞清楚log4j能干什么,简单来说就是提供一个记录不同级别信息内容的日志工具,

可以把不同级别,不同包路径的信息,以指定格式输出到多种设备(控制台,文件等)

在程序中,可以以以下方式来使用

Log log = org.apache.commons.logging.LogFactory.LogFactory.getLog(yourClassName.class);

log.debug(“debug message ——————-“);

log.info(“info message ******************”);

log.warn(“warn message +++++++++++++++”);

log.error(“error msg=================”);

本文主要讲的是如何配置log4j,先让我们先看看一个典型的log4j配置:

==========log4j.properties==================

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n

log4j.appender.fileout=org.apache.log4j.RollingFileAppender

log4j.appender.fileout.File=D:/workspace/log4jtest/log/application.log

log4j.appender.fileout.MaxFileSize=10000KB

log4j.appender.fileout.MaxBackupIndex=10

log4j.appender.fileout.layout=org.apache.log4j.PatternLayout

log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n

log4j.rootCategory=INFO, stdout, fileout

log4j.logger.com.wolfsquare.log2=DEBUG,stdout

===================================

这个文件可以划为三小块

===========第一块定义了一个名为 stdout 的appender和layout (appender,layout的概念后面再解释,目前先记着有这样两个名词):

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

定义stdout的实际输出实现类,从这个appender实现类名可以猜到,这个类是负责控制台输出的。

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

定义stdout的输出装饰器

log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n

装饰器参数配置


============第二块定义了一个名为 fileout 的appender和layout:

log4j.appender.fileout=org.apache.log4j.RollingFileAppender

同理可猜这个实现类是输出到文件的

log4j.appender.fileout.File=D:/workspace/log4jtest/log/application.log

log4j.appender.fileout.MaxFileSize=10000KB

log4j.appender.fileout.MaxBackupIndex=10

log4j.appender.fileout.layout=org.apache.log4j.PatternLayout

log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n

============第三块定义了名字分别为rootCategory,log4j.logger.com.wolfsquare.log2的两个logger

log4j.rootCategory=INFO, stdout, fileout

log4j.logger.com.wolfsquare.log2=DEBUG,stdout

rootCategory logger是缺省的logger,记录所有的包的信息输出。

第二个logger是只输出指定包com.wolfsquare.log2下的日志信息。

那么INFO,DEBUG又是什么意思呢,他们是信息的分级标识,通过继承实现这个实现自定义级别的分级。

第三块配置两句的意思是这样的:

rootCategory 把所有类的INFO级别以上的信息输出到stdout和fileout两个appender中,

logger.com.wolfsquare.log2,把com.wolfsquare.log2包中的所有类(包括子包)DEBUG级别(含)以上的信息输出到stdout 中

一个logger可以输出到很多个设备中(appender),如果需要增加输出设备则用分号分隔开appender名称即可。

输出信息的分类级别是DEBUG > INFO > WARN > ERROR,信息细节由细到粗,指定输出某一级别的信息时,

过细的信息输出将会被忽略

如果一个配置中有多个logger,他们之间会有什么关系呢?答案是,在输出上,他们没有任何关系,都是独立运作的,

不相关的,但是在配置上,父包的配置会传给子包,如果子包没有另外定义配置的话。

例如上面配置文件中的两个logger:

log4j.logger.com.wolfsquare

log4j.logger.com.wolfsquare.log2

这里认为 log4j.logger.com.wolfsquare.log2 继承自 log4j.logger.com.wolfsquare,他们的配置声明如下:

log4j.rootCategory=INFO, stdout, fileout

log4j.logger.com.wolfsquare.log2=,stdout

注意第二句没有指定输出级别,那么根据配置继承规则会继承父logger的配置,在这里就是INFO。

同时需要强调的是,如果两个logger有继承关系,且输出到同一个appender,根据输出独立原则,那么将会出现两行一样的信息,

例如上面的两个logger定义会导致这样的情况。

最后以一幅图来概括:

2006_420273.gif