我正在开发一个使用slf4j进行日志记录的应用程序。我的应用程序调用外部API,该API使用通过j.u.l.(JDK自己的日志记录框架)实现的日志记录来打印日志。如何将外部API的这些日志重定向到我的slf4j日志中? 请注意,外部库的此日志级别设置为"更精细"模式。 这是我到目前为止所取得的成就:
使用jul-to-slf4j桥。
import java.util.logging.Logger;
import org.slf4j.bridge.SLF4JBridgeHandler;
//here i initialize my application
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
Logger.getLogger("").setLevel(Level.FINEST);
结果:为了测试这是否有效,我启动了一个j.u.l的对象。在我的本机代码中,我成功地重定向了j.u.l.登录我的slf4j日志。但使用此方法的外部API日志没有成功。
使用带有以下参数的logging.properties:handlers = org.slf4j.bridge.SLF4JBridgeHandler
并使用JVM参数将路径传递给此配置文件:
Djava.util.logging.config.file=\path\to\logging.properties
结果:再次,没有成功。我能够重定向本机j.u.l.记录到slf4j但不记录外部日志。
注意:我怀疑我遗漏了一些非常微小的信息。如:我必须提供包裹的路径,那就是'外部'日志存在。我也试过了。
这是来自外部API的日志:
logger.debug("CCR to send:\n" + this.myCcr.toString());
logger
对象定义为:
protected static DiameterLogger logger = DiameterLogger.getLogger("com.ericsson.pps.diameter.hlapi");
DiameterLogger
通过j.u.l实现:
public class DiameterLogger {
private DiameterLoggerInterface myLogImpl;
//rest of the code
}
public interface DiameterLoggerInterface {
void debug(String arg0);
//more levels defined below
}
和debug()
方法是通过{util} logging {/ 1>的finer()
实现的
public void debug(String arg0) {
this.myLogger.finer(arg0);
}
如果对此问题有任何疑问,请在下方发表评论。