【发布时间】:2013-11-15 18:40:31
【问题描述】:
所以,我在设置 lo4j 时总是遇到麻烦——我似乎永远无法完全理解我的配置的实际含义。话虽这么说,我正在尝试在一个新应用程序上设置 log4j2,我真的不想在这一点上花时间试图解决这个问题。
对于我的应用程序,我需要做的是设置 log4j2 以便它同时记录到文件和控制台(即标准输出)。除此之外,我需要对其进行配置,使其每天创建一个新的日志文件,并且一次只保留十个。
理想情况下,我想使用异步日志记录,系统范围的默认日志记录阈值设置为 ERROR。
首先,这是我现在的配置,它不处理滚动或最大文件数限制:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug" monitorInterval="600">
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
</Console>
<File name="web-services" fileName="web-services-log">
<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
</File>
<Async name="ASYNC">
<AppenderRef ref="web-services" />
<AppenderRef ref="CONSOLE" />
</Async>
</Appenders>
<Loggers>
<logger name="log4j.logger.httpclient.wire.header" level="fatal"
additivity="false" />
<Root level="debug">
<AppenderRef ref="ASYNC" />
</Root>
</Loggers>
</Configuration>
所以,如果可以的话,还有几个问题:
1.) <Configuration status="log-level"> 和<Root level="debug"> 级别有什么区别?如果我将 root 设置为 ERROR,而将父配置节点级别设置为 DEBUG,该怎么办?
2.) 很多时候,我希望将特定包设置为 DEBUG,而将应用程序的其余部分设置为 ERROR。我是否正确理解我可以通过简单地指定额外的记录器来做到这一点,就像我为<logger name="log4j.logger.httpclient.wire.header" level="fatal" additivity="false" /> 所拥有的那样?
3.) 如果我想将异常记录到他们自己的文件中,仅用于错误和异常,还记录到标准附加程序,我该如何实现?根据我的阅读,异常处理记录器应该是同步的,这样事件就不会丢失。
哦,如果重要的话,这里是我的 log4j2 依赖项的 pom 配置:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.0-beta9</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0-beta9</version>
<scope>compile</scope>
</dependency>
【问题讨论】: