如何在执行时更改log4j2中的日志路径

时间:2015-06-15 07:03:34

标签: java slf4j log4j2

您好我在log4j2上使用slf4j。 如何动态更改日志路径?

我的log4j2.xml看起来像

   <Properties>
        <Property name="home">/path/logs</Property>
    </Properties>
    <Appenders>
        <RollingFile name="default" fileName="${home}/error.log"
                     filePattern="...">
               .......

        </RollingFile>
    </Appenders>

有什么办法可以改变运行时写日志的路径吗?

我尝试在路径中使用系统属性并在运行时设置它,但log4j2不考虑更新的值。系统属性方法 -

<RollingFile name="default" fileName="${sys:home}/error.log"
                     filePattern="...">

(In java class: System.setProperty("home","/newPath"))

这是否需要重新配置。我没有看到重新配置slf4j的任何公开服务。

2 个答案:

答案 0 :(得分:0)

使用DOMConfigurator.doConfigure(),其中第二个参数为LogManager.getLoggerRepository()。这样,您不仅可以更改日志记录路径,还可以更改其他所有内容,例如,包括特定记录器的级别。

我认为你不能使用&#34;实现不可知&#34;来重新配置SLF4j实现。办法。当我们将应用程序从Log4j切换到Logback时,我们还改变了在运行时重新读取配置文件的方式。对于Logback,它使用JoranConfigurator.doConfigure()

答案 1 :(得分:0)

我得到的唯一解决方案是使用上下文变量。

MDC.put("logLocation","path/to/log")

在log4j2.xml

<RollingFile name="default" fileName="${ctx:logLocation}/error.log"
                 filePattern="...">

但是,对于每个线程,上下文应该具有此变量(logLocation)set