Log4j日志级别从高到低分别为:
8:OFF(Integer.MAX_VALUE),用户关闭所有日志记录
7:FATAL(50000),导致应用程序退出的严重错误
6:ERROR(40000),虽然发生了错误但不影响系统的继续运行
5:WARN(30000),会出现潜在的错误情形
4:INFO(20000),在粗粒度级别上,强调应用程序的运行全程
3:DEBUG(10000),在细粒度级别上,对调试应用程序非常有帮助
2:TRACE(5000),
1:ALL(Integer.MIN_VALUE),打开所有日志记录
上述日志级别都定义在org.apache.log4j.Level类中,在org.apache.log4j.Priority类中,定义了各日志级别的整型值,通过各日志级别定义的整型值就很好理解优先级的概念了,比如我Log4j日志级别定义成INFO,那么INFO、WARN、ERROR、FATAL级别的信息会打印出来,DEBUG、TRACE就不会被打印出来。即只有大于等于定义的日志级别的信息才会显示出来!
Log4j官网建议我们在使用Log4j日志级别的过程中,只使用ERROR、WARN、INFO、DEBUG,讲了这么多,是不是不是很直观?那么通过程序代码来看看吧
以下是代码结构,注意,我只引用了log4j-1.2.17这个包,log4j2我们后期的文章会讲解到的。
具体代码如下
import org.apache.log4j.Level; import org.apache.log4j.Logger; public class Test { private static Logger logger = Logger.getLogger(Test.class); public static void main(String[] args) { logger.setLevel(Level.TRACE); //记录Trace级别信息 logger.trace("这是Trace级别信息!【"+Level.TRACE_INT+"】"); //记录Debug级别信息 logger.debug("这是Debug级别信息!【"+Level.DEBUG_INT+"】"); //记录Info级别信息 logger.info("这是Info级别信息!【"+Level.INFO_INT+"】"); //记录Warn级别信息 logger.warn("这是Warn级别信息!【"+Level.WARN_INT+"】"); //记录Error级别信息 logger.error("这是Error级别信息!【"+Level.ERROR_INT+"】"); //记录Fatal级别信息 logger.fatal("这是Fatal级别信息!【"+Level.FATAL_INT+"】"); } }
输出结果
[TRACE] 2017-03-10 10:44:06,181 method:Test.main(Test.java:12)
这是Trace级别信息!【5000】
[DEBUG] 2017-03-10 10:44:06,183 method:Test.main(Test.java:14)
这是Debug级别信息!【10000】
[INFO ] 2017-03-10 10:44:06,183 method:Test.main(Test.java:16)
这是Info级别信息!【20000】
[WARN ] 2017-03-10 10:44:06,183 method:Test.main(Test.java:18)
这是Warn级别信息!【30000】
[ERROR] 2017-03-10 10:44:06,183 method:Test.main(Test.java:20)
这是Error级别信息!【40000】
[FATAL] 2017-03-10 10:44:06,183 method:Test.main(Test.java:22)
这是Fatal级别信息!【50000】
你可以通过调整logger.setLevel(Level.TRACE)更直观的理解Log4j的日志级别。
需要注意的是,虽然我们在程序里面定义了日志的输出级别,但是,还是需要有log4j.properties文件的。不然,程序会报以下错误信息
log4j:WARN No appenders could be found for logger (Test).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
log4j.properties文件的具体内容如下
log4j.rootLogger = debug,stdout log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
好了,通过以上的文章,理解Log4j日志级别是不是很容易?