解决maven+springmvc+log4j多配置文件log4j日志信息不能输出到文件和控制台的全过程

最近做了一个项目,使用log4j作为日志管理工具。一开始日志功能正常,但是项目到后期的时候需要引用公司的jar包,包引入之后自己的日志配置文件就不生效了。

在看本博客前请确保log4j环境配置正常:

  • commons-logging-1.2.jar
  • log4j-1.2.17.jar
  • slf4j-log4j12-1.7.21.jar
  • slf4j-api-1.6.4.jar

且在web.xml中添加了监听:

<context-param>
        <param-name>log4jConfig</param-name>
        <param-value>classpath:log4j.properties</param-value>
</context-param>
<listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

注意监听需要在配置文件下。

日志信息不能输出文件和控制台,起初以为是包冲突的原因,于是使用命令查看项目的包依赖关系:

mvn dependency:tree

执行结果如下:


研究了一下,并没有版本冲突的问题。

于是,仔细研究了公司的jar包,发现每个jar包中都有log4j.properties配置文件。但是我在web.xml中指定了我的配置文件路径,为什么项目启动会忽略我自己的配置而加载jar包中的配置文件呢?此时我自己的log4j.properties配置文件在src/main/resources目录下。

在maven build中加入-Dlog4j.debug,启动项目,查看log4j加载的配置文件路径,发现项目加载的日志配置文件确实是添加的jar包中的。

但是我在web.xml中指定了我的配置文件路径,为什么项目启动会忽略我自己的配置路径而加载jar包中的配置文件呢?

LogManager.java

// if the user has not specified the log4j.configuration

// property, we search first for the file "log4j.xml" and then

// "log4j.properties"

明确了,当用户没有设置log4j.configuration属性,则首先查找log4j.xml,然后查找log4j.properties。

百思不得其解--。有大神看到还望指点一下。

然后根据网上的方法,在项目启动完成后,重新加载log4j配置文件:

PropertyConfigurator.configure("/log4j.properties");

控制台确实打印出来重新加载日志配置文件信息了,然而并不管用,log4j还是没有加载我的配置策略。

没办法,死马当作活马医,我分别在src/main/java、src/main、classpath、webapp下放入我的配置文件,然后在web.xml中修改相应的路径。最后!!!居然在webapp下时,我的日志文件加载成功了!!!!!!
莫名其妙!!!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值