之前遇到应用在启动时没报错信息但也没有输出加载配置文件的信息,总之输出的日志特别少,但应用倒也能正常运行也就没怎么理会,至到应用接了一个外部系统导致启动失败后而又没有输出有效的错误日志时,才决定好好排查为啥日志输出不全的问题。开始怀疑是日志级别的原因,但调了级别后依然没输出全的日志,确定和日志级别没关系。
没办法只好再去看那输出少得可怜的日志信息,倒还真发现了一些有价值的信息:
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后,日志就输出的很全了。