Spring 多日志设计问题的Log4j配置

Spring 多日志设计问题的Log4j配置,spring,web-applications,log4j,spring-aop,Spring,Web Applications,Log4j,Spring Aop,我必须在我们的web应用程序中以以下方式实现log4j: 1) 调试级别日志不得附加到任何文件中。在开发应用程序时,这些日志应仅在开发工作站/IDE的控制台上可用。-它现在正在发生,但在部署之后,这些日志被附加到catalina.out中,我必须停止 2) INFO FORWARD应用程序日志应该放在一个日志文件中—它现在正在发生 3) 对于使用SpringAOP的整个应用程序的性能记录,还应该进行另一个基于文件的记录-尚未实现 log4j配置如下所示: <log4j:configurat

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

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

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

3) 对于使用SpringAOP的整个应用程序的性能记录,还应该进行另一个基于文件的记录-尚未实现

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配置,因此请验证并建议必要的实现,以达到我的要求。

据我所知,您希望不同的附加器将日志推送到不同的日志文件或类似文件中

你在这里遗漏了一件事。请尝试使用过滤器。下面是一个简单的示例,它使用过滤器将不同的日志发送到不同的文件

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


希望这有帮助。如果您遇到其他问题,请与我联系。

据我所知,您需要不同的附加器将日志推送到不同的日志文件或类似的文件中

你在这里遗漏了一件事。请尝试使用过滤器。下面是一个简单的示例,它使用过滤器将不同的日志发送到不同的文件

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


希望这有帮助。如果遇到其他问题,请与我联系。

嘿!请让我知道,如果这是您的查询,并且是您期望的答案感谢您的回复,这有助于过滤日志。但一旦应用程序部署到更高的环境中,我就不想在服务器上的任何地方记录调试级日志。它只在开发环境中有用。这就是为什么我的想法是使用控制台appender。现在,当我们在测试或生产区域部署应用程序时,它开始在catalina.out中记录调试级别的日志,这是不可取的。一个选项是在每次部署迭代之前从上述配置文件中删除调试级条目。但并非每次都可行。那么,您知道如何实现自动化吗?嗯,您不希望在部署服务器上进行日志级调试。。我们通过将服务器日志级别更改为高于调试级别的任何级别来实现这一点。这是实现这一目标的实际途径。此外,如果您觉得这个解决方案不可行,您可以通过编程的方式配置log4j,您可以在监听器中检查环境,该监听器初始化记录器并创建用于调试级别的附加器(如果是开发环境)。嘿!请让我知道,如果这是您的查询,并且是您期望的答案感谢您的回复,这有助于过滤日志。但一旦应用程序部署到更高的环境中,我就不想在服务器上的任何地方记录调试级日志。它只在开发环境中有用。这就是为什么我的想法是使用控制台appender。现在,当我们在测试或生产区域部署应用程序时,它开始在catalina.out中记录调试级别的日志,这是不可取的。一个选项是在每次部署迭代之前从上述配置文件中删除调试级条目。但并非每次都可行。那么,您知道如何实现自动化吗?嗯,您不希望在部署服务器上进行日志级调试。。我们通过将服务器日志级别更改为高于调试级别的任何级别来实现这一点。这是实现这一目标的实际途径。此外,如果您觉得这个解决方案不可行,您可以通过编程方式配置log4j,您可以在侦听器中检查环境,该侦听器初始化记录器,如果是开发环境,则为调试级别创建appender。