log4j使用心得之二 -- log4j配置相对路径日志

本文分享了在项目中如何配置log4j以使用相对于项目根目录的相对路径记录日志,强调了Log4jConfigListener在ContextLoaderListener前配置的重要性,并探讨了在部署多个项目时webapp.root可能导致的冲突问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们组以前一直习惯将log存放在项目根目录下的log目录中,相对比较好查看log. 这就要求log配置的路径是相对于项目根目录的相对路径.

1 log4j配置相对路径

我们使用sping获取项目的根路径.在web.xml中配置listener
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

Log4jConfigListener需要配置在ContextLoaderListener之前才能起到作用.

接下来,在log4j,properties文件中,就可以使用webapp.root表示项目根路径了.
log4j.appender.error.File=${webapp.root}/log/error.log
log文件的位置为项目根路径下的log目录error.log

2 webapp.root在部署多个项目时的冲突问题

在实际项目中,当tomcat中部署了超过一个项目时,tomcat启动时会出现类似如下的错误.
Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [XX] instead of [YY] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!
这是由于webapp.root是作为System Property系统属性存在的,多个项目中都使用了listener就会产生冲突问题.解决的办法是在web.xml中定义webAppRootKey参数,以替换默认的webapp.root
<context-param>  
	<param-name>webAppRootKey</param-name>  
	<param-value>test.root</param-value>  
</context-param>  
此时,在log4j.properties文件中即可按如下方式获取项目路径了
log4j.appender.error.File=${test.root}/log/error.log


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值