【发布时间】:2017-09-07 12:50:01
【问题描述】:
我们使用 apache commons logging 进行日志记录。但是现在我们正在使用一个使用 java.util 日志记录的 OSS 库。
如何让 lib 调用的 java.util 日志语句显示在我们的 apache commons log4j 日志文件中?
【问题讨论】:
标签: java.util.logging apache-commons-logging
我们使用 apache commons logging 进行日志记录。但是现在我们正在使用一个使用 java.util 日志记录的 OSS 库。
如何让 lib 调用的 java.util 日志语句显示在我们的 apache commons log4j 日志文件中?
【问题讨论】:
标签: java.util.logging apache-commons-logging
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 实现也需要更改。
详情请看这里:
他们所做的只是创建一个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);
}
}
【讨论】: