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

Java 如何在任何应用程序中为不同的包使用不同的log4j转换模式,java,log4j,Java,Log4j,如何使用不同的log4j转换模式记录不同包中的消息,并使用相同的文件进行输出 下面是我的配置文件,请建议如何修改以使用不同的转换模式 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration debug="true" xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name="PLUGIN_FILE" c

如何使用不同的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>

在浏览log4j配置文件时,我发现您希望在一个文件中捕获级别为
DEBUG
的所有日志,并在另一个文件中捕获级别为
ERROR
的所有日志,每个文件的转换模式不同

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

OFF
FATAL
ERROR
WARN
INFO
DEBUG
TRACE
ALL


有关更多详细信息,请阅读

,我认为这是不可能的,因为转换模式已分配给FileAppender。您是否有一个很好的理由来解释为什么要将不同的模式放入同一个文件中?这将使读取/解析日志变得困难