首先要明白的一点,也是最重要的一点:
log4j常用的有四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。什么意思呢,或者说log4j的日志级别的优先级是什么意思呢?打个比方,如果你配置了INFO级别,那么程序中所有的DEBUG(logger.debug(xxx))级别的日志信息将不被打印出来,只会打印高于或等于所设置级别的日志,在这里因为配置了INFO,那么将只会打印ERROR、WARN、INFO级别的日志到你配置的输出中。
下面是一个配置模板:
log4j.rootLogger=INFO,stdout,e,w,i log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.Threshold = INFO log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[lzzcms]%d{yyyy-MM-dd HH:mm:ss} %-5p [%20c]%L\u884c: %m %n log4j.appender.i = org.apache.log4j.DailyRollingFileAppender log4j.appender.i.layout = org.apache.log4j.PatternLayout log4j.appender.i.File = ${user.home}/lzzcms/log/lzzcms_info.log log4j.appender.i.Threshold = INFO log4j.appender.i.layout.ConversionPattern=[lzzcms]%d{yyyy-MM-dd HH:mm:ss} %-5p [%20c]%L\u884c: %m %n log4j.appender.w = org.apache.log4j.DailyRollingFileAppender log4j.appender.w.layout = org.apache.log4j.PatternLayout log4j.appender.w.File = ${user.home}/lzzcms/log/lzzcms_warn.log log4j.appender.w.Threshold = WARN log4j.appender.w.layout.ConversionPattern=[lzzcms]%d{yyyy-MM-dd HH:mm:ss} %-5p [%20c]%L\u884c: %m %n log4j.appender.e = org.apache.log4j.DailyRollingFileAppender log4j.appender.e.layout = org.apache.log4j.PatternLayout log4j.appender.e.File = ${user.home}/lzzcms/log/lzzcms_error.log log4j.appender.e.Threshold = ERROR log4j.appender.e.layout.ConversionPattern=[lzzcms]%d{yyyy-MM-dd HH:mm:ss} %-5p [%20c]%L\u884c: %m %n log4j.logger.cn.zhao.dao =DEBUG
解释:
log4j.rootLogger=INFO,stdout,e,w,i,指定程序的所有包使用log4j时打印的日志级别,这里配置为INFO,表示所有包里面低于INFO级别的日志将不被打印,即DEBUG级别不被打印,如果想指定某个包下面的debug级别打印,可以使用log4j.logger.cn.zhao.dao =DEBUG的配置方式。INFO后边的stdout,e,w,i是自己随便起的名字,如果你愿意,可以叫成abc,efg都没有关系,只是要与后边的对应起来。
log4j.appender用于配置你定义的名字,比如log4j.appender.i。
log4j.appender.x.Threshold=WARN:表示进入x所指定的文件的日志级别最少是WARN,那么这里低于warn级别的日志将不被输出。
log4j.appender.x.layout.ConversionPattern用于定义日志的输出格式,%d是时间,后边的{yyyy-MM-dd HH:mm:ss}定义了时间的格式,形如“2018-01-30 21:57:57”;
%-5p:p的意思是priority,优先级的意思,中间的5表示左对齐,因为日志级别ERROR、WARN、INFO、DEBUG,有的是5个字母的,有的是4个字母的,如果直接写%p就会对不齐,%-5p的意思是日志级别输出左对齐,右边以空格填充,%5p的意思是日志级别输出右对齐,左边以空格填充。
%20c:c即class,表示输出全类名,包含包名,如果全类名不足20个,就用空格填补。
%L:L表示line,行的意思,打印出在行
%m:即message,输出代码中指定的消息,即logger.error("添加产品出现错误",e)里面的信息“添加产品出现错误”
%n:输出一个回车换行符
上边的都是常用的解释,经过了上边的配置,比如我有下面一段代码:
@RequestMapping("/contentManage") public String contentManage(){ logger.info("info级别"); logger.warn("warn级别"); logger.error("error级别"); return "content/contentManage"; }
当请求这个路径时,对应的输出分别是:
stdout控制台输出:
e的输出:
w的输出:
i的输出:
因为日志级别:error>warn>info>debug,又因为只会输出大于等于自己的级别的日志,所以又上边的结果,正好符合了我们上边的分析。