Log4j 外部文件加载 - 多个 war

Log4j external file loading - multiple war

我在一个 wildfly 实例中有多个 Web 应用程序(多个 war)。 每个 Web 应用程序读取其名为 webapp1.log4j.properties 的 log4j.properties 文件,该文件存储在 WILDFLY_HOME/standalone/configuration 目录中调用的 servlet:

<servlet>
    <servlet-name>LoadPropertiesServlet</servlet-name>
    <display-name>LoadPropertiesServlet</display-name>
    <servlet-class>it.h2h.smart.identity.servlet.LoadPropertiesServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet>

这里是 LoadPropertiesServlet class:

public void init() throws ServletException {
  log.debug("init()");
  loadConfiguration();
}

private void loadConfiguration() {
...
  log.debug("Loading log4j file " + wildfly_config_path + "/" + webapp_name + ".log4j.properties");
  PropertyConfigurator.configure(wildfly_config_path + "/" + webapp_name + ".log4j.properties");
...
}

这是我的 webapp1。log4j.properties:

log4j.logger.it=DEBUG,WEBAPP
log4j.appender.WEBAPP=org.apache.log4j.DailyRollingFileAppender
log4j.appender.WEBAPP.DatePattern='.'yyyy-MM-dd
log4j.appender.WEBAPP.File=/Users/gianca/WEBAPP.log
log4j.appender.WEBAPP.layout=org.apache.log4j.PatternLayout
log4j.appender.WEBAPP.datePattern=yyyy-MM-dd
log4j.appender.WEBAPP.layout.ConversionPattern=%d %-5p %c:%L %x - %m%n
log4j.appender.WEBAPP.MaxBackupIndex = 10

所以,当只部署一个 War 到 wildfly 时没有问题,但是当我部署多个 War 具有相同结构的不同名称时,我所有 War 的所有记录器=51=] 文件部署写入最后定义的文件名。

因此,使用上面的代码,如果我部署另一个名为 Webapp2.war 的 Web 应用程序来加载 webapp2。log4j.properties 希望在与 webapp1 不同的其他路径上写入:

log4j.logger.it=DEBUG,WEBAPP
log4j.appender.WEBAPP=org.apache.log4j.DailyRollingFileAppender
log4j.appender.WEBAPP.DatePattern='.'yyyy-MM-dd
log4j.appender.WEBAPP.File=/Users/otherpath/WEBAPP.log
log4j.appender.WEBAPP.layout=org.apache.log4j.PatternLayout
log4j.appender.WEBAPP.datePattern=yyyy-MM-dd
log4j.appender.WEBAPP.layout.ConversionPattern=%d %-5p %c:%L %x - %m%n
log4j.appender.WEBAPP.MaxBackupIndex = 10

前一个webapp1.war和最后一个将日志一起写入/Users/otherpath/WEBAPP.log

我在每个 war 文件中使用 log4j-1.2。17.jar 库。

我尝试更改每个 log4j.properties 的 log4j appender 名称,例如 WEBAPP1 和 WEBAPP2,但没有结果。

有办法解决吗? 谢谢

使用 WildFly 解决standalone.xml:

...
    <logging-profiles>
                <logging-profile name="Webapp1">
                    <file-handler name="Webapp1File">
                        <level name="DEBUG"/>
                        <file relative-to="jboss.server.log.dir" path="webapp1.log"/>
                    </file-handler>
                    <root-logger>
                        <level name="DEBUG"/>
                        <handlers>
                            <handler name="Webapp1File"/>
                        </handlers>
                    </root-logger>
                </logging-profile>
            </logging-profiles>

并在每个 War 中插入一个清单文件:

Logging-Profile: Webapp1