我的简单问题是:如果我有两个语句,如Java中的logger.info()和logger.error()(使用log4j),我希望这两行的结果打印在两个单独的文件中。也就是说,logger.info(...)应该打印到一个文件,说myLog.info和logger.error(...)应该打印到myLog.error文件。我正在使用滚动文件appender执行此任务。另外,我只想要一个记录器对象来完成任务。有人可能会为每个文件建议一个或两个以上不同的记录器,但事实并非如此。
我尝试搜索问题的解决方案。其中一个链接Creating multiple log files of different content with log4j表示关于"阈值"我甚至尝试在我的xml配置文件中添加阈值。但它实际上是这样做的:信息日志正在myLog.info文件中打印,但错误日志会打印在两个文件中。可以单独通过xml配置文件完成,还是需要单独的属性文件?如果xml文件足够,那么需要做什么?
我更喜欢在属性文件上使用xml文件。如果只有使用xml配置文件的工作解决方案,那就足够了。提前谢谢。
答案 0 :(得分:1)
您可以使用过滤器拒绝除您想要的级别之外的任何消息。以下是如何执行此操作的示例:
首先是一个测试我们努力的课程:
package test;
import org.apache.log4j.Logger;
public class Main {
private static final Logger logger = Logger.getLogger(Main.class);
public static void main(String[] args) {
logger.debug("here's some debug");
logger.info("here's some info");
logger.warn("here's some warn");
logger.error("here's some error");
logger.fatal("here's some fatal");
}
}
接下来是一个log4j.xml配置文件来设置appender和loggers:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c{1}] %m %n" />
</layout>
</appender>
<appender name="debugLog" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/debug.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="5000KB" />
<param name="maxBackupIndex" value="5" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="DEBUG" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>
<appender name="infoLog" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/info.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="5000KB" />
<param name="maxBackupIndex" value="5" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="INFO" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>
<logger name="test" additivity="false">
<level value="DEBUG" />
<appender-ref ref="consoleAppender" />
<appender-ref ref="debugLog" />
<appender-ref ref="infoLog" />
</logger>
</log4j:configuration>
此模式允许您为每个日志级别生成单独的日志,只需重复我为调试或信息日志记录提供的配置。请注意,控制台appender将接受所有级别。
我能够从this post获得一些见解,所以我认为我应该给予赞扬。