如何将java.util.log转发到apache commons日志?

时间:2017-04-11 23:12:55

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

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

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

1 个答案:

答案 0 :(得分:1)

这包含在Apache Commons FAQ Can calls to java.util.logging be redirected via commons-logging?中。

  

是。从1.4开始,java中存在的java.util.logging类既是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);
    }
}