【问题标题】:How to forward java.util.log to apache commons logging?如何将 java.util.log 转发到 apache commons 日志记录?
【发布时间】:2017-09-07 12:50:01
【问题描述】:

我们使用 apache commons logging 进行日志记录。但是现在我们正在使用一个使用 java.util 日志记录的 OSS 库。

如何让 lib 调用的 java.util 日志语句显示在我们的 apache commons log4j 日志文件中?

【问题讨论】:

    标签: java.util.logging apache-commons-logging


    【解决方案1】:

    Apache Commons 常见问题解答Can calls to java.util.logging be redirected via commons-logging? 对此进行了介绍。

    是的。 java.util.logging 自 1.4 以来出现在 java 中的类既是 API 又是(原始)日志记录实现。可以安装一个“实现”,将消息重定向回 commons-logging,然后将调用定向到 commons-logging 正在向其发送其他消息的适当的具体日志库。

    或者,让您的 java.util.logging “实现”将消息直接发送到 commons-logging 绑定到的同一实现。这会更快 - 尽管如果您更改您的 commons-logging 配置以使用不同的日志库,那么 java.util.logging 实现也需要更改。

    详情请看这里:

    http://wiki.apache.org/myfaces/Trinidad_and_Common_Logging

    他们所做的只是创建一个java.util.logging.Hander 以使 JUL 的输出适应公共日志记录。在示例中,他们可能应该处理位于其他命名日志级别之间的日志级别 int 值,以便您在 JUL 中处理任何自定义日志级别。一个示例补丁是:

    @Override
    public void publish(LogRecord record) {
        Log log = getLog(record.getLoggerName());
        String message = record.getMessage();
        Throwable exception = record.getThrown();
        int level = record.getLevel().intValue();
        if (level >= Level.SEVERE.intValue()) {
            log.error(message, exception);
        } else if (level >= Level.WARNING.intValue()) {
            log.warn(message, exception);
        } else if (level >= Level.INFO.intValue()) {
            log.info(message, exception);
        } else if (level >= Level.CONFIG.intValue()) {
            log.debug(message, exception);
        } else {
            log.trace(message, exception);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 2012-07-20
      • 2017-04-15
      • 2019-06-02
      • 1970-01-01
      • 2019-09-17
      相关资源
      最近更新 更多