当前位置: 首页 > 知识库问答 >
问题:

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

姜博
2023-03-14

嗨,我在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个答案

欧镜
2023-03-14

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

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

在log4j2中。xml

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

然而问题是,对于每个线程,上下文都应该设置这个变量(logPlace)

赏弘
2023-03-14

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

我不认为您可以使用“实现不可知”的方式重新配置SLF4j实现。当我们将应用程序从Log4j切换到Logback时,我们还改变了在运行时重新读取配置文件的方式。对于Logback,它使用JoranConfigurator。doConfigure()

 类似资料:
  • 是的,我已经阅读了所有相关的问题。我正在使用log4j2(尝试了2.4版和更新到最新的2.6.2版)。 我有一个面向客户的小型实用程序。我渴望将暴露的配置保持在最低限度。但对于有问题的情况,我还想添加一个标志,以便在运行时启用调试日志。 这是我启用调试日志记录的代码 但它实际上并不适用于这些情况: 实用程序通常在30秒内完成,因此更改应该是即时的。这是log4j2。xml 使用AppenderRe

  • 我一直在尝试更改用户日志的日志级别,即出现在

  • 我已经在spring boot中使用log4j2完成了日志记录。我想从属性文件动态设置日志文件路径。我已经为此编写了下面的代码,但它工作得不好。 我的财产档案。属性代码如下所示 和我的日志文件log4j2。xml代码如下所示

  • 问题内容: 我对以编程方式更改Log4j2中的日志级别感兴趣。我尝试查看他们的配置文档,但似乎没有任何内容。我也尝试在包中查找:,但其中的任何内容看起来都没有帮助。 问题答案: 根据log4j2 2.4版常见问题进行编辑 您可以使用Log4j Core中的Configurator类设置记录器的级别。 但是请 注意,Configurator类不是公共API的一部分。 资源 编辑以反映Log4j2 2

  • 我对以编程方式更改log4j2中的日志级别感兴趣。我试着查看了他们的配置文档,但似乎没有任何内容。我还试着查看了这个包:,但里面也没有什么有用的东西。