问题: 项目中自己写的代码不打印info日志,但是框架中的info日志都可以打印。

问题原因:日志配置文件错了, 由于jar依赖问题,程序实际使用的是log4j,但是日志配置文件却是log4j2的配置文件。

解决办法:删除maven中引入log4j的jar包,添加log4j2的jar包。

排查思路:slf4j绑定时,会查找org.slf4j.impl.StaticLoggerBinder实现了,搜索一下项目中有几个StaticLoggerBinder类,就能确实使用的日志框架了。(注意:如果同时有多个StaticLoggerBinder类,slf4j会在启动日志的开头打印出有配置问题,控制台上是红色字体)

查看到使用的日志框架后,再看看是否配置了相应的日志配置文件。如:log4j2将默认寻找log4j2.xml 或 log4j2-spring.xml(使用springboot后才会搜索这个文件)等文件。 具体的日志框架默认的文件名可以在网上搜索一下。

扩展:

1)如果自己项目中有日志配置文件就是有本项目的,如果没有,会查找依赖jar包中的日志配置文件。

2)找到一个后, 就使用这个配置文件了,不会再找下一个配置文件了。

3)springboot为什么会找xxx-spring.xml 的日志配置文件呢?可以看看AbstractLoggingSystem类的getSpringConfigLocations方法。

4)只引用了log4j2的jar包,没有配置文件,为什么springboot输出日志会有格式呢?Log4J2LoggingSystem.loadConfiguration方法。spring-boot jar包中有一个log4j2.xml 配置文件。

参考:

1 ) Springboot Logging的配置以及使用详解_蜗行牛步1024的博客-CSDN博客

2)基于slf4j和common-logging的日志框架_lihuayong的博客-CSDN博客_common-logging

3)SpringBoot揭密:spring-boot-starter-logging及源码解析_zhangweiocp的博客-CSDN博客

4)springboot换log4j2写日志源码分析 - dengyouhua - 博客园

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐