WebLogic 14.1.2.0.0集成Log4j2后控制台无日志的配置问题
WebLogic 14.1.2.0.0 配置Log4j2控制台日志不显示的解决步骤
针对你遇到的Log4j2日志无法在WebLogic控制台显示的问题,可按以下步骤排查和修复:
1. 确保WebLogic Log4j集成参数生效
仅在脚本中添加-Dweblogic.log.Log4jLoggingEnabled=true可能因脚本加载顺序问题不生效,推荐通过WebLogic控制台配置启动参数:
- 登录WebLogic控制台,进入服务器 -> 选择目标服务器 -> 配置 -> 服务器启动
- 在“参数”栏添加
-Dweblogic.log.Log4jLoggingEnabled=true,同时可追加-Dlog4j.debug=true(用于输出Log4j2自身的调试日志,定位配置加载问题) - 重启服务器使参数生效
2. 解决类加载冲突问题
WebLogic自带的日志组件可能与应用中的Log4j2类冲突,需配置应用优先加载自身的Log4j2类:
- 若为Web应用,在
WEB-INF/weblogic.xml中添加如下配置:
<?xml version="1.0" encoding="UTF-8"?> <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd"> <container-descriptor> <prefer-application-packages> <package-name>org.apache.logging.log4j.*</package-name> <package-name>org.slf4j.*</package-name> </prefer-application-packages> </container-descriptor> </weblogic-web-app>
- 若为EJB模块,在
META-INF/weblogic-ejb-jar.xml中添加相同的prefer-application-packages配置
3. 完善Log4j2依赖配置
若应用使用SLF4J作为日志门面,需添加Log4j2与SLF4J的桥接依赖,确保日志能正确路由到Log4j2:
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.20.0</version> </dependency>
同时保持原有的log4j-api和log4j-core依赖,无需修改scope(WebLogic 14c默认不自带完整的Log4j2组件)
4. 验证Log4j2配置文件加载
- 确保
log4j2.xml位于src/main/resources目录下,打包后需在应用的WEB-INF/classes(Web应用)或META-INF/classes(EJB模块)中存在 - 修改
log4j2.xml的status为debug,查看WebLogic启动日志中是否有Log4j2的初始化信息,确认配置文件被正确读取:
<Configuration status="debug"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
5. 排查日志触发逻辑
在EJB中添加初始化日志,验证日志组件是否正常工作,排除业务方法未被调用的情况:
@Stateless @GetTypeQualifierV2 public class GetTypeUserEvent implements EventTypeUserHandler { private static final Logger LOGGER = LogManager.getLogger(GetTypeUserEvent.class); @PostConstruct public void init() { LOGGER.info("GetTypeUserEvent 初始化完成"); } @Override public void handle(Object event) { LOGGER.info("GetTypeUserEvent.handle() called with event: {}", event); } }
启动服务器后,若能看到初始化日志,说明Log4j2配置正常,问题出在handle方法的触发逻辑上。
内容的提问来源于stack exchange,提问作者Jose Villacres
相关产品推荐
相关产品推荐

