【问题标题】:Log4j2 Configuration - Daily Rolling with Max FilesLog4j2 配置 - 每日滚动最大文件
【发布时间】: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.) &lt;Configuration status="log-level"&gt;&lt;Root level="debug"&gt; 级别有什么区别?如果我将 root 设置为 ERROR,而将父配置节点级别设置为 DEBUG,该怎么办?

2.) 很多时候,我希望将特定包设置为 DEBUG,而将应用程序的其余部分设置为 ERROR。我是否正确理解我可以通过简单地指定额外的记录器来做到这一点,就像我为&lt;logger name="log4j.logger.httpclient.wire.header" level="fatal" additivity="false" /&gt; 所拥有的那样?

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>

【问题讨论】:

    标签: java logging log4j log4j2


    【解决方案1】:

    A1。配置状态级别用于 log4j internal 状态日志。如果将其设置为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 的记录器,您将其链接到“错误文件”附加程序。为了确保这个记录器看到所有事件,你给它你的应用程序的顶级包的名称。例如,如果您的应用程序使用包 com.mycompany.myproject.module.SomeClass,您可以将记录器命名为“com.mycompany.myproject”,甚至可以只命名为“com”。如果您有多个顶级包,您可以为每个包声明一个错误级别记录器。

    【讨论】:

      【解决方案2】:

      回答您最初的问题 »... 每日滚动最大文件«:不幸的是,这在当前版本的 log4j2 中没有实现(在 beta9 中也没有在 rc1 中实现)。

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

      【讨论】:

        猜你喜欢
        • 2013-11-06
        • 1970-01-01
        • 2016-10-24
        • 1970-01-01
        • 1970-01-01
        • 2014-10-18
        • 2019-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多