Skip to main content
 首页 » 编程设计

log4j之如何使用 log4j.xml 配置 log4j 以根据类名附加到不同的日志文件

2024年10月25日29EasonJim

我想设置 log4j,以便从包 com.foo.bar 下的类生成的所有日志消息都转到 bar.log,而从包 com.bar.blatz 下的类生成的所有日志消息都转到 blatz.log。
问题

  • 如何使用 log4j.xml 执行此操作?
  • 我知道它可以使用属性文件,但是我如何使用 XML 配置来做到这一点?
  • 请您参考如下方法:

    这是基于我的 answer一个类似的问题:

    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
        <!-- general application log --> 
        <appender name="BarLogFile" class="org.apache.log4j.FileAppender"> 
            <param name="File" value="bar.log" /> 
            <param name="Threshold" value="INFO" /> 
            <layout class="org.apache.log4j.PatternLayout"> 
                <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/> 
            </layout> 
        </appender>  
     
        <!-- additional fooSystem logging --> 
        <appender name="BlatzLogFile" class="org.apache.log4j.FileAppender"> 
            <param name="File" value="blatz.log" /> 
            <layout class="org.apache.log4j.PatternLayout"> 
                <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/> 
            </layout> 
        </appender> 
     
        <logger name="com.foo.bar"> 
            <appender-ref ref="BarLogFile"/> 
        </logger> 
     
        <logger name="com.bar.blatz"> 
            <appender-ref ref="BlatzLogFile"/> 
        </logger> 
     
        <root> 
            <level value="INFO"/> 
            <!-- no appender, output will be swallowed (I think) --> 
        </root> 
    </log4j:configuration> 
    

    如果向根元素添加 appender-ref,它还会收到 com.foo.bar 等消息。您可以通过在记录器上指定 'additivity="false"' 来阻止它。