如果你想使用 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,这可以在每个包/资源的基础上完成。更精确地,类加载器的顺序会针对指定的包进行更改。
虽然仅将 SLF4J 和 Logback jar 与 EAR 或 WAR 捆绑会导致错误或根本没有日志记录,但在将工件捆绑在两者中时也会收到警告。如果有人有改进的想法,请随时发表评论!
据我了解,EAR 和 WAR 文件在 WebLogic 中有不同的类加载器,即使 WAR 与 EAR 捆绑在一起。这就是为什么你不能在他们之间共享这个库,对吗?
配置 Logback:为了能够在运行时更改 logback 配置,您必须在 WebLogic 类路径中的某个位置放置 logback.xml。找了很多网站,告诉我WebLogic从域目录加载资源文件,但在我的情况下它不在类路径中,所以我不得不通过服务器启动脚本将它添加到全局类路径中(这会影响每个域的 logback 设置!)。同样,欢迎任何改进!