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
我在一个 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