【问题标题】:Maintaining several log4j.xml configurations for multiple webapps为多个 webapp 维护多个 log4j.xml 配置
【发布时间】:2015-12-05 19:58:37
【问题描述】:

目前我们在 Tomcat 中有多个 (10+) webapps,每个都必须有自己的 log4j.xml 配置,因为

  • 每个 webapp 都有不同的 DailyRollingFileAppender 文件名
  • 通常有 2-3 个附加程序(信息/错误日志、审计、统计信息)
  • 可能具有独特的记录器级别定义,以减少某些闲聊组件。

越来越大的挑战是使用日志记录的各方需要不同的格式、规则和日志级别:

  • 开发人员希望对所有内容都进行 TRACE 日志记录,测试人员希望进行 INFO 日志记录,系统管理员(用于生产部署等)只希望 ERROR 级别
  • 开发人员和测试人员都对 DailyRollingFileAppender 感到满意,而系统管理员则希望改用 logrotate
  • 系统管理员想要压缩日志,这对开发人员和测试人员来说很不方便。

所以最明显的解决方案当然是为每个 webapp 使用 3 个变体(log4j.xml.dev、log4j.xml.test、log4j.xml.prod)的 log4j.xml,并以某种方式重新部署相应的一个。维护甚至设置这看起来像是一场噩梦。

另一种选择是在 webapps 之外的某个位置,所有 webapps 都会有 1 个 log4j.xml,为该环境设置一次,而不是每次都重新部署。似乎更好,但是那个大的 log4j.xml 可能会变得混乱,我没有找到任何关于这是否是一个好方法或者在这种情况下应该放置 log4j.xml 的任何建议。

如果有人遇到类似的困境,你是如何解决的?如果您使用了上述方法之一,或者您对完全不同的方法有想法 - 我想听听。谢谢。

【问题讨论】:

    标签: java xml tomcat logging log4j


    【解决方案1】:

    您可能有兴趣或值得一看 Logstash

    https://www.elastic.co/guide/en/logstash/current/config-examples.html

    【讨论】:

    • 谢谢。它似乎主要用于监视/处理现有日志,但我看不出它如何帮助配置日志。您能否更具体一点(抱歉,如果我问的是明显的问题,我从未使用过 Logstash)?
    【解决方案2】:

    对于其他有相同问题的发帖者,我会在这里贴一个答案,虽然不理想,但提供了部分解决方案,至少对我们来说是这样。

    • 迁移到log4j 2。它可以更好地控制您如何旋转日志并允许将它们压缩
    • 创建 2 个 log4j 配置:一个用于调试,一个用于生产。我们使用 Maven 进行构建和发布,因此 Maven 的配置文件控制将哪个 log4j 模型添加到 webapp:构建配置文件将选择一个调试/扩展配置,而发布将选择一个简化的生产配置:

      <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>
            ...
    

    【讨论】:

      猜你喜欢
      • 2016-08-27
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 2021-03-23
      • 1970-01-01
      • 2019-08-16
      • 2010-10-01
      • 1970-01-01
      相关资源
      最近更新 更多