【问题标题】:log4j2 wrapped by JBoss logging由 JBoss 日志记录包装的 log4j2
【发布时间】:2013-12-05 15:44:05
【问题描述】:

我有一个使用三个库的应用:

  1. 首先使用 JBoss 日志记录
  2. 第二次使用 Apache Commons 的日志记录
  3. 第三个直接使用 log4j2 API 如果它在类路径(或 log4j 如果不是)

并配置为将日志记录路由到 log4j 1.2。

由于性能问题,我想切换到 log4j2。

我已经从类路径中删除了 log4j,并在那里添加了 log4j2-1.2-bridge、log4j2-core 和 log4j2-api。我已经通过 -Dlog4j.configurationFile 配置了日志记录,配置类似于以下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
   <Appenders>
      <Console name="CONSOLE" target="SYSTEM_OUT">
         <PatternLayout pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %m%n"/>
      </Console>
   </Appenders>
   <Loggers>
      <Logger name="foo" level="TRACE">
         <AppenderRef ref="CONSOLE"/>
      </Logger>

      <Logger name="foo.bar" level="DEBUG">
         <AppenderRef ref="CONSOLE"/>
      </Logger>
      <Logger name="xxx" level="TRACE">
         <AppenderRef ref="CONSOLE"/>
      </Logger>
      <Root level="DEBUG">
         <AppenderRef ref="CONSOLE"/>
      </Root>
  </Loggers>
</Configuration>

现在,我有几个问题:

  1. 来自 Apache Commons 日志的消息被记录两次
  2. 由 JBoss 日志记录 i18ed 的消息(通过从 annotations) 没有按照配置进行格式化,而是 改用默认的 log4j2 格式。不过这些只写 一次。
  3. JBoss 日志记录的非 i18ed 消息很少 由一个特定的班级,但不是全部(这真的很奇怪)
  4. 来自直接使用 log4j2 API 的消息被记录两个到 三遍

任何提示如何解决这些问题?

【问题讨论】:

  • 您是否将 JBoss 日志记录仅用于 i18n 功能?在 JBoss Logging github.com/jboss-logging/jboss-logging/pull/9 中有一个获取 log4j2 支持的拉取请求。完成后,您可以使用 JBoss Logging 作为外观,使用 log4j2 作为日志管理器。
  • 不,我使用的库中使用了 JBoss 日志记录,对此我无法更改太多。我也更愿意省略 log4j-1.2-bridge 的步骤。不过,我看不出在使用旧 API 时遇到这样的麻烦的原因。

标签: logging jboss log4j log4j2


【解决方案1】:

所以我基本上犯了两个错误:

  1. 我没有发现 log4j2 日志记录中使用的可加性 - 每个记录器都必须具有 additivity="false"(可以以某种方式全局设置吗?)
  2. 我的 jboss-logging 版本是 3.1.2.GA,遗憾的是,在哪里使用 log4j2 尚未修复(参见 JBLOGGING-94)。它只在 非发布版本 3.1.4.GA,所以我必须使用 SNAPSHOT 版本 (并且无法通过 log4j2 支持发布我的应用)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 2015-09-17
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多