之前遇到应用在启动时没报错信息但也没有输出加载配置文件的信息,总之输出的日志特别少,但应用倒也能正常运行也就没怎么理会,至到应用接了一个外部系统导致启动失败后而又没有输出有效的错误日志时,才决定好好排查为啥日志输出不全的问题。开始怀疑是日志级别的原因,但调了级别后依然没输出全的日志,确定和日志级别没关系。
没办法只好再去看那输出少得可怜的日志信息,倒还真发现了一些有价值的信息:
`SLF4J:Failed to load class "org.slf4j.impl.StaticLoggerBinder
SLF4J:Defaulting to no-operation(NOP) logger implementation`
从 slf4j 网站上看到了这样一名:SINCE 1.6.0 If no binding is found on the class path,theh SLF4J will default to a no-operation implementation,说出了出现 NOP 的原因是 class path 下 no binding,应用中也确实没有加 log 的 binding, 同时 log4j 所需要的 jar 版本也比较混乱:有的高于 1.6 有的低于 1.6。slf4j 网站上也列出了好几种 binding(slf4j-log4j12、slf4j-jdk14、slf4j-simple 等),另外 log4j 的版本也需要注意,应用我用的相关 jar 包是:
`<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21/version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.2</version>
</dependency>`
统一了版本,然后加了 log binding 后,日志就输出的很全了。