我们使用apache commons记录日志。但是现在我们正在使用一个使用java.util日志记录的OSS库。
如何让lib调用的java.util日志语句显示在我们的apache commons log4j日志文件中?
答案 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实现。
详情请见此处:
他们正在做的只是创建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);
}
}