使用slf4j api将日志重定向到log4j

时间:2011-12-28 14:42:52

标签: logging log4j java.util.logging slf4j

我有一个使用java.util日志记录的应用程序,这个应用程序使用的库使用不同的日志框架,如sl4j,jcl,log4j。现在我想将所有日志重定向到log4j,这样我就可以完全控制它了。所以我将此依赖项添加到我的pom中this建议。并使用不同的记录器进行日志记录,如下所示。为什么util log不在输出中

               _loggerUtil.log(Level.SEVERE, "*********************Util log**********");
             _loggerCommon.fatal("*********commons log ************");
             _loggerSlf4j.error("**************sl4j log **************");
             _loggerLog4j.fatal("**************log4j log**************");



     2012-01-05 17:11:35,508 [http-8080-3] ERROR com.endersys.itap.ui.module.user.LoginBean - *********commons log ************
^[[19~2012-01-05 17:11:43,561 [http-8080-3] ERROR com.endersys.itap.ui.module.user.LoginBean - **************sl4j log **************
2012-01-05 17:11:44,433 [http-8080-3] FATAL com.endersys.itap.ui.module.user.LoginBean - **************log4j log**************






   <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.6.4</version>
    </dependency>

      <!--java util to slf4j bridge -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jul-to-slf4j</artifactId>
        <version>1.6.4</version>
    </dependency>


        <!--common logging  to slf4j bridge -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.6.4</version>
    </dependency>


      <!--sl4j to  log4j bridge-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.6.4</version>
    </dependency>

1 个答案:

答案 0 :(得分:4)

对于jul-to-slf4j,仅仅将工件添加为依赖项是不够的。除此之外,您还需要通过调用SLF4JBridgeHandler.install()(在应用程序启动期间的某个位置,例如在servlet上下文侦听器中)以编程方式设置桥。

注1:jul-to-slf4j在Tomcat中运行良好,因为Tomcat的JUL实现创建了每个应用程序的logger名称空间。但是,我不建议在任何其他应用程序服务器上使用它(除了那些具有类似于Tomcat的JUL实现的服务器)。

注意2:您应该仔细阅读SLF4JBridgeHandler的Javadoc以检查您是否真的想要使用它(即使在Tomcat上)。