目前我们在Tomcat中有多个(10+)webapps,每个都必须有自己的log4j.xml配置,因为
越来越多的挑战是使用日志记录的各方需要不同的格式,规则和日志级别:
因此,最明显的解决方案当然是为每个webapp提供3个变体(log4j.xml.dev,log4j.xml.test,log4j.xml.prod)中的log4j.xml,并以某种方式重新部署相应的。这看起来像是一场维持甚至安装的噩梦。
在webapps之外有一些位置的另一个选项是,所有webapps都有1个log4j.xml,它为该环境设置一次,而不是每次都重新部署。看起来更好,但是大的log4j.xml可能会变得混乱,我没有找到关于这通常是一个好方法还是在这种情况下应该放置log4j.xml的任何建议。
所以,如果有人有类似的困境,你是如何解决的?如果您使用上述方法之一,或者您对完全不同的方法有所了解 - 我想听听它。感谢。
答案 0 :(得分:0)
对于其他有相同问题的海报,我会在这里发布一个不理想的答案,但提供部分解决方案,至少对我们而言。
创建2个log4j配置:一个用于调试,一个用于生产。我们使用Maven进行构建和发布,因此Maven的配置文件控制将log4j模型添加到webapp:build profile将获取调试/扩展配置,而release将获取减少的生产配置:
<profiles>
<profile>
<id>logDebug</id>
<activation>
<property>
<name>!release</name>
</property>
</activation>
<properties>
<log4j.xml>log4jDebug.xml</log4j.xml>
</properties>
</profile>
<profile>
<id>logRelease</id>
<activation>
<property>
<name>release</name>
<value>true</value>
</property>
</activation>
<properties>
<log4j.xml>log4jRelease.xml</log4j.xml>
</properties>
</profile>
然后:
<build>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo message="Use log4j configuration file ${log4j.xml}" />
<copy tofile="${project.build.directory}/classes/log4j.xml" overwrite="true">
<fileset dir="src/main/resources/">
<include name="${log4j.xml}" />
</fileset>
</copy>
</tasks>
</configuration>
</execution>
...