1。简介
Log4j是一个应用十分广泛的JAVA日志框架。
2。几个重要的概念
1)Logger
日志输出的实现类。
将日志分为TRACE,DEBUG,INFO,WARING,ERROR,FATAL6个级别,从左到右依次递增,
通过设置相应的级别可以选择性地输出日志内容。
命名实体,名字大小写敏感,名字上的层级关系和Logger本身的层级关系一致,
并且名字相当于ID,一个名字只能对应一个Logger实体。
Logger之间的层级关系:
和包之间的层级关系一致:假如一个Logger1的名字是另一个Logger2名字的前缀,并且Logger2中Logger1下一个字符为".",那么Logger1为Logger2的祖先,Logger2为Logger1的后代。
除此之外:root Logger处于顶级,它有2个特殊之处
(1)一直存在
(2)无法通过名字获取,而是通过Logger.getRootLogger()来获取,
其它的Logger则是通过Logger.getLogger(...)来获取。
注:Logger的创建顺序与层级关系无关。
日志级别的继承关系:
假如一个Logger没有显示声明一个日志级别,那么它将继承离它最近的被赋予日志级别的祖先的日志级别。
例如:
Logger---------LEVEL SET--------LEVEL
ROOT DEBUG DEBUG
X NULL DEBUG
X.Y NULL DEBUG
X.Y.Z WARNING WARING
2)Appender
日志的输出目标,可以是控制台,文件等。
并且一个Logger可对应多个Appender。
Appender的继承关系:
默认附加性的继承,而不同于日志级别的无显示声明才集成,
即假如root Logger有一文件Appender,则所有的日志至少拥有一个同样的文件Appender。
改变:logger.setAdditivity(false)
效果:从该logger开始的后代logger包括该logger将不再继承该logger的祖先的Appender
Logger Name | Added Appenders | Additivity Flag | Output Targets | Comment |
---|---|---|---|---|
root | A1 | not applicable | A1 | The root logger is anonymous but can be accessed with the Logger.getRootLogger() method. There is no default appender attached to root. |
x | A-x1, A-x2 | true | A1, A-x1, A-x2 | Appenders of "x" and root. |
x.y | none | true | A1, A-x1, A-x2 | Appenders of "x" and root. |
x.y.z | A-xyz1 | true | A1, A-x1, A-x2, A-xyz1 | Appenders in "x.y.z", "x" and root. |
security | A-sec | false | A-sec | No appender accumulation since the additivity flag is set to false . |
security.access | none | true | A-sec |
例如:
Logger------------------Appender Add----------Additivity----------Appenders Indeed
root console default console
com file1 default console,file1
com.spring file2 false file2
com.spring.bean null default file2
3)Layout
日志的输出格式。
3。配置
目前支持properties和xml两种配置文件,这里只讲述log4j.properties文件的配置。
log4j.rootLogger = (%level%) [, appenderName]*
log4j.logger.%loggerName% = (%level%) [, appenderName]*
log4j.appender.%appenderName% =
log4j.appender.%appenderName%.%property% =
log4j.appender.%appenderName%.layout =
log4j.appender.%appenderName%.layout.%property% =
例如:
log4j.rootLogger=DEBUG, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout # Print the date in ISO 8601 format log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # Print only messages of level WARN or above in the package com.foo. log4j.logger.com.foo=WARN
4。参考资料