Java 如何在tomcat上更改log4j2日志路径?

Java 如何在tomcat上更改log4j2日志路径?,java,spring,log4j,spring-boot,log4j2,Java,Spring,Log4j,Spring Boot,Log4j2,我正在使用springboot在tomcat上运行一个webapp 如何动态更改log4j2.xml日志路径?(例如通过jvm参数、属性文件或其他方式) 到目前为止,我对日志xml进行了如下配置: <Configuration> <Properties> <property name="path">${bundle:application:log.path}</property> </Properties>

我正在使用
springboot
tomcat
上运行一个webapp

如何动态更改
log4j2.xml
日志路径?(例如通过jvm参数、属性文件或其他方式)

到目前为止,我对日志xml进行了如下配置:

<Configuration>
    <Properties>
        <property name="path">${bundle:application:log.path}</property>
    </Properties>
</Configuration>
现在我想动态地将日志路径强制为eg
d:/log test
,但不必修改我的
war
文件。因为在重新部署时,我将丢失任何手动配置

那么,如何提供不同的日志记录路径呢


我想在同一台机器上运行多个配置文件,因此环境或系统属性在这里对我没有任何用处。

您可以用上面提到的多种方法来完成

如果您希望使用环境变量,则可以执行以下操作:

${env:MY_LOG_PATH}
如果是系统属性,则:

${sys:MY_LOG_PATH}

正如已经提出的那样,使用${sys:LOG_PATH}可能是最好的解决方案。您不必修改war,但您必须为dev运行一个tomcat,为测试运行一个单独的tomcat。然后只需将set CATALINA_选择在setenv.sh或setenv.bat中包含-DLOG_PATH=/my/log/PATH,让一个tomcat同时运行这两个文件就没有多大意义了。

部署时的war文件应该被取消jar,然后您应该能够直接修改您的属性文件。您只需重新启动应用程序,以便log4j再次读取属性文件。@RaviThapliyal这正是我想要阻止的,因为在部署新版本时,每次都必须显式修改war文件。并不是说一个同事可能会错过那个重要的一步……日志路径很少是绝对的,也不是每次部署都会改变它。最终路径显然将提交到您的存储库,并反映在最终构建中。如果仍然需要覆盖属性文件,那么将值外部化到属性文件有什么用?我认为,在构建后进行测试有点违背了它的目的。这两个属性对我来说都不是有用的,因为我想在同一台机器上运行test+dev概要文件。所以您应该清楚地提到这一点。您刚才说“现在我想动态地将日志路径强制为eg d:/log test,但不必修改我的war文件。”为什么它对您不起作用?你不能在同一台机器上定义两个不同的系统属性吗?如果我定义了两个不同的系统道具,那么我必须显式地编辑我的war的日志文件内容。这也是我想要阻止的。这不是系统属性驱动的吗?dev你有一个,UAT你有一个,prod你有一个?如果不是这样的话,我担心任何事情都会有所帮助。也许你是对的,在不同的Tomcat中运行webapp,每个Tomcat都有一个env变量集可能是正确的解决方案。
${sys:MY_LOG_PATH}