log4j:将特定类的输出logging到特定的appender

我使用log4j,并希望将某些logging器的输出路由到特定的文件。

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

可以这样做吗?

一个例子:

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 

下面是关于XMLconfiguration的一个答案,请注意,如果您不给文件appender一个ConversionPattern ,它将创build0字节的文件,而不是写任何东西:

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