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日志框架应用解决方案

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