Java:如何重定向j.u.l.第三方/外部库的日志到我的本机应用程序使用的slf4j框架中?

时间:2018-06-14 13:37:57

标签: java logging logback slf4j jul-to-slf4j

我正在开发一个使用slf4j进行日志记录的应用程序。我的应用程序调用外部API,该API使用通过j.u.l.(JDK自己的日志记录框架)实现的日志记录来打印日志。如何将外部API的这些日志重定向到我的slf4j日志中? 请注意,外部库的此日志级别设置为"更精细"模式。 这是我到目前为止所取得的成就:

  1. 使用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);

  2. 结果:为了测试这是否有效,我启动了一个j.u.l的对象。在我的本机代码中,我成功地重定向了j.u.l.登录我的slf4j日志。但使用此方法的外部API日志没有成功。

    1. 使用带有以下参数的logging.properties:handlers = org.slf4j.bridge.SLF4JBridgeHandler并使用JVM参数将路径传递给此配置文件:

      Djava.util.logging.config.file=\path\to\logging.properties

    2. 结果:再次,没有成功。我能够重定向本机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);
          }
      

      如果对此问题有任何疑问,请在下方发表评论。

0 个答案:

没有答案
相关问题