WebLogic 12C集中了Log4J或Logback配置

时间:2013-02-21 22:26:11

标签: log4j weblogic slf4j logback syslog

我想配置集中登录到WebLogic 12C。根据业务需求,我必须在生产环境中使用Syslog,我必须在开发人员和测试环境中提供自定义(例如文件,控制台日志)。我想为域中的每个应用程序仅处理1个集中日志配置。应用程序使用SLF4J API。在Glassfish 3.1和WebLogic 10.3.5中,当我将Logback或Log4J桥及其实现放入域lib并配置它们时,效果很好。但是在WebLogic 12C中,我遇到了很多问题。主要问题是WL已经在模块之间包含SLF4J绑定(我不想修改WL,或者我应该?)。因此,当我放置第二个绑定时,SLF4J无法初始化它/它们并使用默认的JUL记录器。我还尝试通过WL管理控制台配置Log4J记录器,但只有服务器消息进入Log4J记录器,应用程序的消息仍然转到JUL。 (http://docs.oracle.com/cd/E24329_01/web.1211/e24428/config_logs.htm#i1011558https://forums.oracle.com/forums/thread.jspa?threadID=1037672

那么如何在WebLogic12C域中只维护1个Log4J或Logback(或满足上述req的任何其他解决方案)配置?

请求帮助!

1 个答案:

答案 0 :(得分:4)

如果你想使用SLF4J和Logback这里有一些说明:

你必须将你希望与你的应用程序一起使用的SLF4J和Logback工件捆绑在一起(这是我发现的唯一有用的解决方案!我知道普通人不会捆绑SLF4J绑定!)。还要将WAR项目中的weblogic.xml(WebLogic特定的web.xml)和EAR项目中的weblogic-application.xml(WebLogic特定的application.xml)捆绑在一起(如果两者都使用,则选择匹配的) 。同样,EAR和WAR都必须提供以下工件:

  • SLF4J-API
  • 的logback核
  • 的logback经典

这些xml文件的内容:

<强> weblogic.xml中

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app
    xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd
    http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">

    <!-- GERMAN: http://www.torsten-horn.de/techdocs/jee-oracleweblogic.htm -->
    <wls:container-descriptor>
        <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
    </wls:container-descriptor>
</wls:weblogic-web-app>

<强> WebLogic的application.xml中

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">

    <!-- GERMAN: http://www.torsten-horn.de/techdocs/jee-oracleweblogic.htm -->
    <prefer-application-packages>
        <package-name>org.slf4j.*</package-name>
        <package-name>org.apache.commons.logging.*</package-name>
    </prefer-application-packages>

    <prefer-application-resources>
        <resource-name>org/slf4j/impl/StaticLoggerBinder.class</resource-name>
    </prefer-application-resources>

</weblogic-application>

使用这些xml文件,您可以告诉WebLogic更喜欢捆绑的版本而不是WebLogic附带的版本(WAR)。对于EAR,这可以基于每个包/资源来完成。更精确的是,为指定的包更改了类加载器的顺序。

虽然仅使用EAR或WAR捆绑SLF4J和Logback jar会导致错误或根本没有记录,但在捆绑两者中的工件时也会收到警告。如果有人有改进意见,请随时发表评论!

据我所知,即使WAR与EAR捆绑在一起,EAR和WAR文件在WebLogic中也有不同的类加载器。这就是为什么你不能在它们之间共享这些库,我是对的吗?

配置回归: 为了能够在运行时更改logback配置,您必须在WebLogic类路径中的某处放置logback.xml。我找到了很多网站,告诉我WebLogic从域目录加载资源文件,但在我的情况下它不在类路径中,所以我不得不通过服务器启动脚本将它添加到全局类路径(这将影响返回设置forEVERY域名!)。 再次欢迎任何改进!