如何在任何应用程序中为不同的包使用不同的log4j转换模式

时间:2012-09-19 19:47:26

标签: java log4j

如何使用不同的log4j转换模式记录不同包中的消息,并使用相同的文件进行输出。

以下是我的配置文件,请建议如何修改以使用不同的转换模式

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration debug="true" xmlns:log4j='http://jakarta.apache.org/log4j/'> 



<appender name="PLUGIN_FILE" class="LoggerTest.NewLogForEachRunFileAppender"> 
     <!-- Below param sets the dir path of the log files -->
    <param name="FileDirPath" value ="/var/opt/mycomp/ftpm/" />
    <!-- Below param sets the suffix name for the log file -->
    <param name="FileNameSuffix" value="_error.log" /> 
    <param name="MaxFileSize" value="10KB"/> 
    <!-- Below param creates the specified number of backup files to be created when rolled back -->
    <param name="MaxBackupIndex" value="10"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
        <param name="ConversionPattern" value="%-4r %d [%t] %-5.37c %M() %L %x %m%n" /> 
    </layout>   
    <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
        <param name="LevelMin" value="debug" /> 
        <param name="LevelMax" value="fatal" /> 
        <param name="AcceptOnMatch" value="true" /> 
    </filter> 
</appender> 

<appender name="ERROR_FILE" class="LoggerTest.NewLogForEachRunFileAppender"> 
     <!-- Below param sets the dir path of the log files -->
    <param name="FileDirPath" value ="/var/opt/mycomp/ftpm/" />
    <!-- Below param sets the suffix name for the log file -->
    <param name="FileNameSuffix" value="_error.log"/> 
    <param name="MaxFileSize" value="10KB"/> 
    <!-- Below param creates the specified number of backup files to be created when rolled back -->
    <param name="MaxBackupIndex" value="10"/> 
    <layout class="org.apache.log4j.PatternLayout"> 

        <param name="ConversionPattern" value="%d [%t] - %m%n" /> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
        <param name="LevelMin" value="error" /> 
        <param name="LevelMax" value="fatal" /> 
        <param name="AcceptOnMatch" value="true" /> 
    </filter> 
</appender> 

<logger name="LoggerTest.a" additivity="false">
        <appender-ref ref="PLUGIN_FILE"/>
</logger>

<root> 
    <level value="error" />     
        <appender-ref ref="ERROR_FILE" />

    <!-- To enable the trace messages for debugging uncomment the below appender ref statement -->
    <level value="DEBUG" />
             <appender-ref ref="DEBUG_FILE" /> 
</root>
</log4j:configuration>

2 个答案:

答案 0 :(得分:2)

在浏览log4j配置文件时,我可以确定您要在一个文件中捕获级别为DEBUG的所有日志,并在另一个具有不同转换模式的文件中捕获级别为ERROR的所有日志每个文件。

如果是这样,那么你必须设置一些其他机制来实现它,因为当你在root logger中定义级别值时,它将捕获所有提到级别的日志以及低于日志记录层次结构的所有日志

OFF
FATAL
ERROR
WARN
INFO
DEBUG
TRACE
ALL

logger level

有关详细信息,请参阅this

答案 1 :(得分:1)

我认为这是不可能的,因为转换模式已分配给FileAppender。你有充分的理由想要将不同的模式放入同一个文件吗?这将使阅读/解析日志变得困难。