所以,我总是在设置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">
级别之间有什么区别?如果我将根设置为ERROR并将父配置节点级别设置为DEBUG,该怎么办?
2.。)很多时候,我希望将特定包设置为DEBUG,而将应用程序的其余部分设置为ERROR。我是否理解我可以通过简单地为<logger name="log4j.logger.httpclient.wire.header" level="fatal" additivity="false" />
指定其他记录器来做到这一点?
3。)如果我想让异常登录到他们自己的文件,只是为了错误和异常,还有标准的appender,我怎么能完成这个?根据我的阅读,异常处理记录器应该是同步的,这样事件就不会丢失。
哦,如果重要的话,这是我的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>
答案 0 :(得分:2)
A1。配置状态级别适用于log4j 内部状态日志。如果将其设置为DEBUG
,log4j将在启动时打印有关其配置为System.out
的记录器和追加程序的信息。确定任何配置问题很有用。无论您将其设置为什么值都不会影响应用程序日志记录。
A2。您配置的每个Logger都需要链接到具有AppenderRef
元素的目标Appender。例如:
<logger name="log4j.logger.httpclient.wire.header" level="fatal" additivity="false">
<AppenderRef ref="ASYNC" />
</logger>
A3。从当前配置开始,添加另一个File Appender,我们称之为“error-file”。现在添加另一个级别为ERROR
的记录器,您将链接到“error-file”appender。要确保此记录器可以查看所有事件,请为其指定应用程序顶级程序包的名称。例如,如果您的应用程序使用包com.mycompany.myproject.module.SomeClass,您可以将记录器命名为“com.mycompany.myproject”,或者甚至只是“com”。如果您有多个顶级包,则可以为每个包声明一个ERROR级别记录器。
答案 1 :(得分:1)
回答你最初的问题»...每日滚动最大文件«:不幸的是,这不是在当前版本的log4j2中实现的(在rc1中也没有在beta9中实现)。