2010-05-04 154 views
140

我使用log4j并且想将某些记录器的输出路由到特定文件。log4j:将特定类的输出记录到特定的appender中

我已经有了多个appender。现在,为了使调试更容易,我想告诉log4j应该将特定类(例如foo.bar.Baz)生成的输出写入特定的日志文件。

可以这样做吗?

回答

178

一个例子:

log4j.rootLogger=ERROR, logfile 

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.logfile.datePattern='-'dd'.log' 
log4j.appender.logfile.File=log/radius-prod.log 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n 

log4j.logger.foo.bar.Baz=DEBUG, myappender 
log4j.additivity.foo.bar.Baz=false 

log4j.appender.myappender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.myappender.datePattern='-'dd'.log' 
log4j.appender.myappender.File=log/access-ext-dmz-prod.log 
log4j.appender.myappender.layout=org.apache.log4j.PatternLayout 
log4j.appender.myappender.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n 
+20

啊 - 那简单!谢谢! log4j.additivity.foo.bar.Baz = false设置是否强制Baz的输出不会显示在rootLogger的appender中? – gubrutz 2010-05-04 08:25:42

+0

是的,没错 – 2010-05-04 08:40:46

+2

log4J的版本是什么?我试图找到xml配置为log4j版本做同样的事情1.2.17 – 2014-05-30 15:37:58

12

下面是关于XML配置的回答,请注意,如果你不给的appender一个ConversionPattern的文件时,它会创建0字节的文件,并没有写任何东西:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
    <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
     <param name="Target" value="System.out"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
     </layout> 
    </appender> 

    <appender name="bdfile" class="org.apache.log4j.RollingFileAppender"> 
     <param name="append" value="false"/> 
     <param name="maxFileSize" value="1GB"/> 
     <param name="maxBackupIndex" value="2"/> 
     <param name="file" value="/tmp/bd.log"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
     </layout> 
    </appender> 

    <logger name="com.example.mypackage" additivity="false"> 
     <level value="debug"/> 
     <appender-ref ref="bdfile"/> 
    </logger> 

    <root> 
     <priority value="info"/> 
     <appender-ref ref="bdfile"/> 
     <appender-ref ref="console"/> 
    </root> 

</log4j:configuration> 
+1

从''移除''是至关重要的 - 否则你会看到你的整个日志也复制到这个文件。 – sab 2016-12-24 16:57:18

+0

如何配置默认pacakge或没有包的特定类? – 2017-03-10 05:18:25

+0

这是' ...'元素。将类或包指定为名称,将appender指定为文件appender。 – mikeb 2017-03-10 13:38:49