您的位置:首页 > 运维架构

log4j.properties配置文件配置项的说明

2015-12-17 16:54 260 查看
在程序中,可以以以下方式来使用

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定义会导致这样的情况。

最后以一幅图来概括:

%2038CF21C6.png?download&psid=1]

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: