如何设置和使用Log

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设置和使用Log相关的知识,希望对你有一定的参考价值。

参考技术A   设置和使用 Log:

  1、设置Log有使用主要的组件,Loggers记录器,Appenders 输出源和Layouts布局。

  2、输入代码综合使用这三个组件可以地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。

  3、Loggers组件在此系统中被分为五个级别,DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,分别用来指定这条日志信息的重要程度,只输出级别不低于设定级别的日志信息。

  4、使用 Log,允许把日志输出到不同的地方,控制台(Console)、文件(Files)等,根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方。

如何设置log4j2 asyncQueueFullPolicy

我使用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>

干杯

答案

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

您可以通过系统属性log4j2.AsyncQueueFullPolicy配置Log4j2的行为。见AsyncQueueFullPolicyAsyncQueueFullPolicyFactory。具有一些日志级别的“丢弃”策略可能是有意义的。

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

如果此属性具有值"Discard",则此工厂将创建DiscardingAsyncQueueFullPolicy对象。默认情况下,如果队列已满,此路由器将丢弃级别INFO,DEBUG和TRACE的事件。这可以使用属性log4j2.DiscardThreshold(开始丢弃的级别的名称)进行调整。

以上是关于如何设置和使用Log的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JBoss5 中使用 log4j 设置 DBAppender?

如何设置log4j2 asyncQueueFullPolicy

如何使用 Spring Boot 设置 log4j2 自定义附加程序?

使用Log4J 2查找JNDI变量查找时如何设置默认值?

如何在log4j2.xml中动态设置日志文件路径

如何按文件夹设置error_log?