【问题标题】:Log4j configuration for multiple logging design issue多日志记录设计问题的 Log4j 配置
【发布时间】:2012-01-12 02:53:42
【问题描述】:

我必须在我们的 Web 应用程序中以以下方式实现 log4j:

1) DEBUG 级别的日志不得附加到任何文件中。在开发应用程序时,这些日志应该仅在开发工作站/IDE 的控制台上可用。 - 现在正在发生,但部署后这些日志会附加到 catalina.out 中,我必须停止。

2) INFO 应用程序日志应该放在一个日志文件中 - 它现在正在发生。

3) 对于使用 Spring AOP 的整个应用程序的性能日志记录,还应该使用另一个基于文件的日志记录 - 尚未实现。

log4j 配置如下:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender" >
<param name="Threshold" value="DEBUG" />   
  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d %-5p  [%c{1}] %m %n" />
  </layout>
</appender>

<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
  <param name="Threshold" value="INFO" />
  <param name="File" value="${catalina.home}/logs/dashboard.log"/>
  <param name="DatePattern" value="'-'yyyy-MM-dd'.log'"/>
  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="[%d{ISO8601}] - %-5p- [%X{USER_ENCRYPT_ID}%x] - %C.%M(%F:%L) - %m %n" />
  </layout>
</appender>


<logger name="com.project14" additivity="false" >   
  <level value="DEBUG" />
  <appender-ref ref="consoleAppender" /> 
  <appender-ref ref="fileAppender"/>      
</logger>

</log4j:configuration>

我是 log4j 配置的新手,所以请验证并建议必要的实现以实现我的要求。

【问题讨论】:

    标签: spring web-applications log4j spring-aop


    【解决方案1】:

    据我了解,您希望不同的附加程序将日志推送到不同的日志文件或类似的东西。

    您在这里缺少一件事。请尝试使用过滤器。这是一个简单的例子,它使用过滤器将不同的日志发送到不同的文件。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="DEBUG" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p  [%c{1}] %m %n" />
        </layout>
    </appender>
    
    <appender name="fileAppenderInfo" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="Threshold" value="INFO" />
        <param name="File" value="d:/info.log" />
        <param name="DatePattern" value="'-'yyyy-MM-dd'.log'" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="[%d{ISO8601}] - %-5p- [%X{USER_ENCRYPT_ID}%x] - %C.%M(%F:%L) - %m %n" />
        </layout>
         <filter class="org.apache.log4j.varia.LevelRangeFilter">
                        <param name="levelMin" value="INFO" />
                        <param name="levelMax" value="INFO" />
         </filter>
    </appender>
    
    <appender name="fileAppenderDebug" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="Threshold" value="DEBUG" />
        <param name="File" value="d:/debug.log" />
        <param name="DatePattern" value="'-'yyyy-MM-dd'.log'" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="[%d{ISO8601}] - %-5p- [%X{USER_ENCRYPT_ID}%x] - %C.%M(%F:%L) - %m %n" />
        </layout>
         <filter class="org.apache.log4j.varia.LevelRangeFilter">
                        <param name="levelMin" value="DEBUG" />
                        <param name="levelMax" value="DEBUG" />
         </filter>
    </appender>
    
    <appender name="fileAppenderWarn" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="Threshold" value="WARN" />
        <param name="File" value="d:/warn.log" />
        <param name="DatePattern" value="'-'yyyy-MM-dd'.log'" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="[%d{ISO8601}] - %-5p- [%X{USER_ENCRYPT_ID}%x] - %C.%M(%F:%L) - %m %n" />
        </layout>
         <filter class="org.apache.log4j.varia.LevelRangeFilter">
                        <param name="levelMin" value="WARN" />
                        <param name="levelMax" value="WARN" />
         </filter>
    </appender>
    
    
    <logger name="com.log4j.test" additivity="false">
        <level value="all"/>
        <appender-ref ref="fileAppenderWarn" />
        <appender-ref ref="fileAppenderDebug"/>
        <appender-ref ref="fileAppenderInfo"/>
    </logger>
    </log4j:configuration>
    

    希望这会有所帮助。如果您遇到其他问题,请回复我。

    【讨论】:

    • 嘿!请让我知道,如果这是您的查询以及您所期望的答案
    • 感谢您的回复,它有助于过滤掉日志。但是一旦应用程序部署在更高的环境中,我不想在服务器上的任何位置记录调试级别日志。它仅在开发环境中有用。这就是为什么我的想法是使用控制台附加程序。现在,当我们在测试或生产区域部署应用程序时,它开始在 catalina.out 中记录 DEBUG 级别的日志,这是不可取的。一种选择是在每次部署迭代之前从上述配置文件中删除调试级别条目。但它并非每次都可行。那么知道如何自动化它吗?
    • 好吧,您不希望部署服务器上的日志级别 DEBUG。我们通过将服务器日志级别更改为高于 DEBUG 的任何级别来实现这一点。这是实现这一目标的实际方法。此外,如果您觉得此解决方案不可行,您可以以编程方式配置 log4j,您可以在侦听器中检查初始化记录器的环境,如果是开发环境,则为调试级别创建附加程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多