2013-02-21 135 views
3

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

那么我怎样才能在WebLogic12C域中只维护1个Log4J或Logback(或满足上述需求的任何其他解决方案)配置?

Thx求救!

回答

4

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

你要捆绑你想与你的应用程序中使用SLF4J和的logback神器(这是唯一可行的解​​决方案,我发现我知道,通常不会绑定一个SLF4J绑定!)。还要在WAR项目中绑定weblogic.xml(WebLogic特定的web.xml),并在EAR项目中绑定weblogic-application.xml(WebLogic特定的application.xml)(如果两者都使用两者,则选择匹配项) 。同样两个EAR和WAR必须提供以下项目:

  • SLF4J的API
  • 的logback核心
  • 这些XML文件中的logback经典

内容:

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> 

随着你告诉WebLogic中喜欢捆绑版本过的人的WebLogic这些XML文件自带(WAR)。对于EAR,这可以在每个包/资源的基础上完成。更精确的说,指定包的类加载器的顺序是变化的。

虽然将SLF4J和Logback jar与仅EAR或WAR捆绑在一起会得到一个错误或根本没有日志记录,但捆绑两个工件时也会收到警告。如果有人有改进的想法,请随时发表评论!

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

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