最近在做一个项目, 需要用到log4j来生成日志, 方便debug
但是log4j是分版本的, 现在的最新版是log4j2, 而不是log4j.
我一开始以为只是版本新旧有不同, 后来发现配置文件log4j.properties怎么都加载不进去. 查了好多资料才发现log4j2和log4j是不兼容的.
1. pom.xml
事实上从maven导包这一过程中就可以看出来两者的不一样了,
log4j
的依赖为
1 | <!-- https://mvnrepository.com/artifact/log4j/log4j --> |
log4j2
的依赖为
1 | <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> |
很明显的不一样嘛.
只可惜第一次接触日志系统的我显然没有意识到事情的严重性, 天真的以为反之都是log4j, 差不到哪里去. 就没当回事. 所以引入依赖后就开始了谷歌和必应各种示例 😂😂
2. 创建实例
在官网搜到了示例, 自然就是自己运行测试一下了, 把demo复制下来竟然发现报错了,
报错的原因是log4j这个类没有找到. 很奇怪, 明明我导入了maven依赖啊.
1 | // Import log4j classes. |
这时, 我又自作聪明地分析起来了, 官网的导入是在org.apache.log4j
下面, 而我导入的maven依赖是org.apache.logging.log4j
, 少一个logging
啊. 于是我自以为是的把 import org.apache.log4j.Logger;
修改为了 import org.apache.logging.log4j.Logger;
这下发现Logger
中没有getLogger()
方法, 又搜了几篇博客. 发现应该要用这个LogManager
static Logger logger ==LogManager.getLogger(Test.class);
然后看似这下所有的错误都解决了, 即将能用了, 事实上我又踩进了一个坑
3. 配置文件
上面的问题解决后, 我就开始考虑写配置文件自定义日志输出. 但是这时候问题就来了, 配置文件log4j.properties
无论如何也不会生效.
我一开始认为是配置文件放的位置有问题, 反复检查发现没错, 又上网搜, 办法都试过了也没用. classpath什么的又检查了一遍也没问题
快要放弃的时候看到一篇博客, 配置文件是log4j2.xml
, 我这才想起来版本的问题. 后来一查才发现这两个版本的配置文件确实不一样. 一个是log4j.xml
一个是log4j2.xml
!!! 据说log4j2之前的版本不支持log4j2.properties
, 但是在后来的版本也加入了支持.
把配置文件改为log4j2.xml
就ok了, 真没想到一个小小的2
会造成这么大的麻烦.
事实上, 前面有2次提早发现错误的机会maven依赖的异常和创建实例时的异常, 如果趁早发现趁早弄清楚, 不会在这个坑上越陷越深.
也提醒自己以后碰到一个新组件的话还是要先弄清楚原理, 不要网上拿过一个demo就用, 会避免很多坑