Log4j2配置 - 每日滚动最大文件

时间:2013-11-15 18:40:31

标签: java logging log4j log4j2

所以,我总是在设置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>

2 个答案:

答案 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中实现)。

另见https://issues.apache.org/jira/browse/LOG4J2-435