【问题标题】:How to setup log4j2 asyncQueueFullPolicy如何设置 log4j2 asyncQueueFullPolicy
【发布时间】:2018-05-25 15:02:18
【问题描述】:

我正在使用 log4j-core-2.5 进行日志记录,并且我想在日志记录队列已满时丢弃项目。我已经确定这可以通过使用 log4j 中的 log4j2.asyncQueueFullPolicy 配置属性来应用。

请有人帮助我了解如何在我的应用程序中应用此配置。

我正在使用这样的文件配置...

Configurator.initialize("", "log4j-node.xml");

我的配置文件看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{dd-MMM HH:mm:ss.SSS} %logger{1}.%t %-5level] %msg%n"/>
        </Console>

        <RollingFile name="DefaultFile" fileName="../logs/app.log"
                 filePattern="../logs/app-%d{MM-dd-yyyy}-%i.log" bufferedIO="true" bufferedSize="32000" immediateFlush="false">
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            ...

        </RollingFile>

        <Async name="AsyncFile">
            <AppenderRef ref="DefaultFile"/>
            <LinkedTransferQueue/>
        </Async>

        <Async name="AsyncConsole">
            <AppenderRef ref="Console"/>
            <LinkedTransferQueue/>
        </Async>

    </Appenders>

    <logger name="org.hibernate">
        <level value="debug" />
    </logger>

    <Loggers>
        <Root level="TRACE">
            <AppenderRef ref="AsyncConsole"/>
            <AppenderRef ref="AsyncFile"/>
        </Root>
        <Logger name="org.hibernate.SQL" level="error" />
        <!-- Log all JDBC parameters -->
        <Logger name="org.hibernate.type" level="error" />
        <!-- Log all SQL DDL statements as they are executed -->
        <Logger name="org.hibernate.tool.hbm2ddl" level="error" />
        <!-- Log the state of all entities (max 20 entities) associated with the session at flush time -->
        <Logger name="org.hibernate.pretty" level="error" />
        <!-- Log all second-level cache activity -->
        <Logger name="org.hibernate.cache" level="error" />
        <!-- Log transaction related activity -->
        <Logger name="org.hibernate.transaction" level="error" />
        <!-- Log all JDBC resource acquisition -->
        <Logger name="org.hibernate.jdbc" level="error" />
        <!-- Log HQL and SQL ASTs during query parsing -->
        <Logger name="org.hibernate.hql.ast.AST" level="error" />
        <!-- Log all JAAS authorization requests -->
        <Logger name="org.hibernate.secure" level="error" />
        <!-- Log everything (a lot of information, but very useful for troubleshooting) -->
        <Logger name="org.hibernate" level="error" />

    </Loggers>
</Configuration>

干杯

【问题讨论】:

    标签: java logging configuration log4j log4j2


    【解决方案1】:

    首先,请升级到 Log4j 2.10,修复了an important issue 在此区域中,当队列已满时,日志事件不再出现在日志文件中的乱序。

    您可以通过系统属性log4j2.AsyncQueueFullPolicy 配置 Log4j2 的行为。请参阅 AsyncQueueFullPolicyAsyncQueueFullPolicyFactory。具有某些日志级别的“丢弃”策略可能会引起人们的兴趣。

    属性log4j2.AsyncQueueFullPolicy 控制路由 行为。如果此属性未指定或值为"Default", 这个工厂创建DefaultAsyncQueueFullPolicy 对象。

    如果这个属性的值为"Discard",这个工厂创建 DiscardingAsyncQueueFullPolicy 对象。默认情况下,此路由器 如果队列已满,则丢弃 INFO、DEBUG 和 TRACE 级别的事件。 这可以通过属性log4j2.DiscardThreshold(名称 开始丢弃的级别)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      相关资源
      最近更新 更多