在分布式环境中使用 log4j2 集中配置日志记录的建议机制是什么?



我正在尝试构建一个集中式机制来配置我的log4j2记录器。这样做的目的是创建一个 Web 应用程序来控制给定记录器的配置,无论它部署在何处。换句话说,我的记录器应该能够检测到中央配置面板中的任何更改并自动重新配置。

现在,我正在尝试拥有一个包含 3 个表(应用程序 <- 记录器<- 追加器)和一个自定义配置工厂和一个自定义配置的数据库,但我不确定这种方法是否更合适。

任何建议或指南都非常感谢。提前谢谢。

我得出了以下解决方案,它符合我的要求,但可以通过多种方式增强:

  • 我创建了一个 servlet,它转到数据库并加载记录器配置。
  • 我已经设置了一个配置文件,该文件使用 XInclude 通过 servlet 的 URI 加载 log4j2 配置 XML。
  • 我没有使用配置工厂和我正在处理的配置...厌倦了他们:-)

这就像一个魅力...但是,请注意,目前 Log4J2 无法在使用 XInclude 时检测到远程配置中的任何更改。JIRA中的一份报告被反对,让他们知道xinclude在以这种方式包含配置时不遵守监视器间隔。

这是我正在使用的配置文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<Configuration xmlns:xi="http://www.w3.org/2001/XInclude" name="Log4J2Config"
monitorInterval="5" status="Trace">
   <Properties>
    <Property name="Pattern">%d{ISO8601}|APP=%marker|%p|%c|%M|%m%n</Property>
   </Properties>
   <xi:include href="http://localhost:7001/log4j2config/getlog4j2xmlconfig?appCode=log4jConfig&amp;section=full" />
</Configuration>

我从servlet加载以下XML片段:

<?xml version="1.0" encoding="UTF-8"?>
<Appenders>
    <RollingFile name="RollingFile" fileName="app.log" filePattern="app-%d{yyyyMMdd}-%i.log.gz">
        <PatternLayout pattern="${Pattern}" />
        <Policies>
            <SizeBasedTriggeringPolicy size="50MB" />
        </Policies>
    </RollingFile>
</Appenders>
<Loggers>
    <Root level="OFF">
        <AppenderRef ref="RollingFile" />
    </Root>
    <Logger name="mylog" level="warn" includeLocation="true">
        <AppenderRef ref="RollingFile" />
    </Logger>
</Loggers>

此外,我提出了一个新功能请求来创建允许加载远程配置的插件。

我希望这可以帮助在这种情况下的其他人。

最新更新