Log4j 2.0 - 日志文件中没有出现日志 - 使用 log4j2.xml 在同一类中尝试多个记录器

Posted

技术标签:

【中文标题】Log4j 2.0 - 日志文件中没有出现日志 - 使用 log4j2.xml 在同一类中尝试多个记录器【英文标题】:Log4j 2.0 - No Logs appearing in the Log Files - Trying Multiple Loggers in the same Class using log4j2.xml 【发布时间】:2013-09-09 21:56:21 【问题描述】:

下面是我创建的 log4j2.xml 文件。我为异步日志配置了 async_file.log,为常规和同步日志配置了 regular_file.log。问题是创建了日志文件,但文件的大小为零并且没有日志。所有日志都进入 server.log 文件(JBOSS),而不是我配置的 2 个文件(async_file.log 和 regular_file.log)。

请告诉我为什么日志没有进入我配置的日志文件。请帮助我或给我一些指导或提示。

我在同一个类文件中通过名称 DCLASS 调用两个不同的记录器,如下所示:

private static final transient Logger LOG = Logger.getLogger(DCLASS.class);

private static final transient Logger ASYNC_LOG = Logger.getLogger("ASYNC");

我在类路径中包含了以下 jar: 1.log4j-api-2.0-beta8.jar 2.log4j-core-2.0-beta8.jar 3.disruptor-3.0.0.beta1.jar

我的 log4j2.xml 如下:

<?xml version="1.0" encoding="UTF-8"?>

<configuration status="INFO">
  <appenders>
    <!-- Async Loggers will auto-flush in batches, so switch off immediateFlush. -->

    <FastFile name="AsyncFastFile" fileName="../standalone/log/async_file.log" 
              immediateFlush="false" append="true">
      <PatternLayout>
        <pattern>%d %p %class1. [%t] %location %m %ex%n</pattern>
      </PatternLayout>
    </FastFile>

    <FastFile name="FastFile" fileName="../standalone/log/regular_file.log" 
              immediateFlush="true" append="true">
      <PatternLayout>
        <pattern>%d %p %class1. [%t] %location %m %ex%n</pattern>
      </PatternLayout>
    </FastFile>
  </appenders>

  <loggers>
    <!-- pattern layout actually uses location, so we need to include it -->
    <asyncLogger name="ASYNC" level="trace" includeLocation="true">
      <appender-ref ref="AsyncFastFile"/>
    </asyncLogger>

    <root level="info" includeLocation="true">
      <appender-ref ref="FastFile"/>
    </root>

  </loggers>
</configuration>

【问题讨论】:

【参考方案1】:

日志没有进入日志文件的原因是,我使用的是“Logger”而不是“LogManager”。

在代码中,我有

private static final transient Logger ASYNC_LOG = Logger.getLogger("ASYNC");

代码应该是

private static final transient Logger ASYNC_LOG = Logmanager.getLogger("ASYNC");

当它是“logger”时,编译器正在查看“Log4j API”,当它是“LogManager”时,它正在查看“Log4j2 API”。由于我已将所有内容配置为使用 Log4j2,通过将 logger 更改为 LogManager,日志开始按预期进入日志文件。

【讨论】:

很高兴你解决了它!两点说明:您可能想要使用更新版本的中断器(最新版本是 3.2),并且在即将发布的 log4j2 beta-9 中,FastFile appender 已重命名为 RandomAccessFile appender,当您使用时需要更新配置转变。只是一个提示。

以上是关于Log4j 2.0 - 日志文件中没有出现日志 - 使用 log4j2.xml 在同一类中尝试多个记录器的主要内容,如果未能解决你的问题,请参考以下文章

log4j输出日志乱码(转)

是否有 roo 2.0 log4j 附加组件或示例

对log4j产生的日志文件进行监控

log4j日志文件指定大小问题

log4j日志配置详解

log4j日志文件输出错误的解决过程