Use slf4j + Log4j2 to build logs: http://blog.csdn.net/heyutao007/ article/details/50371668
First download the relevant jars, log4j-1.2.17.jar, slf4j-api-1.7.9.jar, slf4j-log4j12-1.7.9.jar
package org; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class testSFL4J { private static Logger log = LoggerFactory.getLogger(testSFL4J.class); public static void main(String[] args) { log.debug("=======test root========="); log.info("========test daily level info========="); log.warn("========test warn========="); log.error("========test error========="); } }
There are two configuration methods for log4j, one is XML, the other is java property file properties, my configuration method is
log4j.properties, the details are as follows:
log4j.rootLogger = DEBUG,stdout,D
log4j.appender.stdout = org. apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} %c %l %m%n
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy- MM-dd HH:mm:ss,SSS} %c %m%n
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = F://logs/log.log
log4j.appender .D.Append = true
### when the appender Threshold is null, extend from rootLogger,
### when the appender Threshold is exist, compare the Threshold with the level of rootLogger
### set the higher level
log4j.appender.D.Threshold = ERROR
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = [%-5p] %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - %c%m%n
#log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.E.File =F://logs/error.log
#log4j.appender.E.Append = true
#log4j.appender.E.Threshold = ERROR
#log4j.appender.E.layout = org.apache.log4j.PatternLayout
#log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
Console output:
[DEBUG] 2016 -10-22 11:52:52,084 org.testSFL4J ======test root==========
[INFO] 2016-10-22 11:52:52,084 org.testSFL4J ==== ====test daily level info==========
[WARN] 2016-10-22 11:52:52,084 org.testSFL4J ========test warn======= ==
[ERROR] 2016-10-22 11:52:52,084 org.testSFL4J ========test error==========
File output:
[ERROR] 2016-10-22 11: 52:52 [ main:0 ] - org.testSFL4J========test error==========
Summary:
As can be seen from the above, when the appender's Threshold is control, the rootLogger is inherited, When not null, output level, whichever is higher for appender and rootLogger.