weblogic中web項目不打印日誌,logback失效

情景:
項目部署在tomcat有日誌文件輸出,而部署在weblogic 12c上就沒有日誌文件的輸出。

分析:

可能的原因1:項目中的 slf4j 的和 weblogic 12c 自帶的slf4j模塊衝突。

解決辦法:在 WEB-INF目錄新增 weblogic.xml,配置優先加載項目中的slf4j 模塊。

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
	<container-descriptor>
		<prefer-application-packages>
			<package-name>org.slf4j</package-name>
		</prefer-application-packages>
	</container-descriptor>
</weblogic-web-app>

可能的原因2:項目中存在多個日誌實現框架,如logback、log4j。這樣會導致一個問題,slf4j門面綁定的實現框架不確定。

小編遇到的情況是這樣的:項目預期是使用logback框架,所以配置了logback.xml文件。在tomcat運行正常,但在 weblogic環境中無法打印日誌。經查,運行過程中slf4j綁定的日誌實現並不是logback。而是其他框架。
在這裏插入圖片描述
如圖,多個found binding,說明找到多個日誌實現。而Actual binding即爲實際綁定的日誌實現。我們預期是使用 logback,但實際上綁定的是 log4j。
再往下深究,項目中並沒有顯式的引入圖中所顯示的 slf4j-log4j12 依賴。這包是從哪來的?使用maven依賴包分析工具,發現該包是由於引入 zookeeper依賴而間接引入的。
到這裏,知道jar包的來源就好辦了。
解決辦法
方式1. 添加 log4j.xml 配置文件。既然實際綁定的是log4j,自然添加了配置就能輸出日誌。(不推薦,隨機綁定不可控)
方式2. 將 slf4j-log4j12 的依賴排除掉,僅保留logback。

<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
	<version>3.4.10</version>
	<exclusions>
		<exclusion>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
		</exclusion>
	</exclusions>
</dependency>

refrence:
官網 weblogic.xml配置文件說明
源碼解讀SLF4J綁定日誌實現的原理
Weblogic 12c 運行使用Slf4j日誌框架應用解決方案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章