java log4j的一些总结

阅读更多
log4j所有日志级别  off debug info warn error fatal all, 其中常用的是debug info warn error, log4j只记录 打印等级>=配置等级的日志,如log4j.properties中配置记录等级是info,那么代码中的debug()日志是不会被记录到日志中的。

log4j.rootLogger=[level],[appender1,appender2...]
log4j.logger.com.test=[level],[appender1,appender2...]
第一句是配置根“存储器”,level表示记录级别,后面的表示存储器,可以有多个。存储级别和记录器都是可以省略的,但中间的逗号不能省,如果省略了记录级别,则会依次去找它的父Logger的记录级别,直到roogLogger,每一个类对应的Logger只能有一个记录级别,子类的记录级别会覆盖父类的记录级别,如log4j.logger.com=info表示com这个包下的类的日志记录级别是info,如果此时的log4j.rootLogger的日志级别是debug,那么com包下的类会覆盖根中的等级配置。但是,子Logger的记录器会继承父Logger中的继承器(相同的不会覆盖,而是两个),如果log4j.roogLogger=debug, console, log4j.logger.com=debug, console,那么此果的com下的类有两个记录器console,console,也就是说会打印两条日志。此时可以用log4j.additivity.com=false禁用com下的类的日志输出。

存储器:
前面说过可以对包\类设置日志记录级别,日志会被记录到存储器中,在存储器的配置里,我们也可以针对存储器配置日志的记录等级,log4j.appender.XX.Threshold=info表示只有等级 >=info的日志才允许记录到这个存储器中,此时debug()的信息是不能被记录到这个存储器的。
常用的存储器一般是文件(每日文件和滚动文件),开发常用是控制台,还有其它的存储器。

PS:上面说的Logger的父子关系,指的是包的层级结构上的父子级关系,如 com.test.chapter1.Test这个类,Test类的父Logger是com.test.chapter1,再往上是com.test再往上是com,再往上就是rootLogger了。

还有两个问题,我在用ibatis,想看执行的sql, log4j.properties和 http://www.iteye.com/topic/309147 这篇文章上说的一样,我只配置了java.sql.PreparedStatement,其它的ibatis的java.sql.Connection java.sql.ResultSet我不要,但是这样log4j会警告说:Connection和ResultSet没有配置,无关大雅,可以继续用。但是我通过log4j.additivity.java.sql.Connection=false把Connection的日志给忽略掉,结果不行,不知道是什么原因。
另一个问题:如果我配置了log4j.roogLogger的话,系统运行会很慢,不配置的话会很快,不知道为什么???

你可能感兴趣的:(java log4j的一些总结)