log4j日志不输出的问题
总阅读 次
记一次日记不输出的排查过程
刚接手一个springMVC的老项目,系统起来后,控制台不输出日记,日记文件中也没日记
1.首先确认了下,系统启动后是会生成指定的日记文件的,且控制台能输出system.out.print的日记,不能输出Logger输出的日记。
2.百度了解了下,可能是log4j的依赖冲突,导致并没有这个包加载进来,于是使用mvn dependency:tree -Dverbose>temp/tree.txt(点击见详解)指令查看依赖关系,发现有很多的org.slf4j:slf4j-api conflict
3.使用exclusions在所有冲突的包下去除掉slf4j依赖1
2
3
4
5
6<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
4.重启项目后发现,日记文件里有日记进去了,但是控制台还是一直没有输出,继续排查
log4j.properties配置文件如下:
1 | log4j.rootLogger = stdout,D |
log4j.rootLogger认识
log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
appenderName:就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
例如:log4j.rootLogger=info,A1,B2,C3 配置了3个输出地方,这个名字可以任意(如上面的db),但必须与我们在后面进行的设置名字对应;
控制台不输出的原因是我把level给去掉了,stdout为控制台输出放到了最前面导致的,修改log4j.rootLogger配置如下:log4j.rootLogger = INFO,stdout,D
至此,问题解决!