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 用于设置环境变量