根据系统属性、环境变量动态设置LOG4J2日志路径

1、根据环境变量ENV设置

<- 可以根据System.getenv("LogHomeRoot")获取的环境变量,可以直接通过以下方式设置 ->
<property name="LOG_HOME">${env:LogHomeRoot}</property>

2、根据系统属性SYS设置

<- 可以根据System.getProperty("LogHomeRoot")获取的系统属性,可以直接通过以下方式设置 ->
<property name="LOG_HOME">${sys:LogHomeRoot}</property>

3、通过监听设置系统属性实现

1> 编写监听类

ServletContextListener:当Servlet容器启动或终止Web应用时触发。

public class Log4j2ContextListener implements ServletContextListener{
	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		String LogHomeRoot = "/data/logs/test";
		System.setProperty("LogHomeRoot", LogHomeRoot);
	}
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		System.getProperties().remove("LogHomeRoot");
	}
}

2> web.xml配置监听

     配在ContextLoaderListener前面。尽可能配在前面,避免其他地方需要处理日志写入,但日志路径不完整。

<listener>
    <listener-class>com.test.Log4j2ContextListener</listener-class>
</listener>

3> log4j2.xml

<property name="LOG_HOME">${sys:LogHomeRoot}</property>

这样,tomcat启动后,spring加载之前设置好系统属性,加载log4j2时就可以取到动态变量值了。

顺便记录一下Eclipse设置Tomcat启动时参数:

Servers窗口tomcat双击打开,点击 Open launch configuration,打开设置页面,或者:

Run -> Run Configurations -> 选中Tomcat Server:

Arguments 标签 VM arguments 用于设置系统属性,比如:-DLogHomeRoot="/data/logs/test",多个参数之间空格分隔

Environment 标签 New 用于设置环境变量

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值