Log4j2配置文件已创建但无法写入日志问题求助
问题排查与解决方案
1. 处理JBoss日志模块冲突
JBoss自带的日志组件会优先接管日志输出,必须在jboss-deployment-structure.xml(若你的文件是jboss-deployment.xml,建议重命名为标准名称)中明确排除容器自带的日志依赖,强制使用项目内的Log4j2:
<jboss-deployment-structure> <deployment> <exclude-subsystems> <subsystem name="logging"/> </exclude-subsystems> <exclusions> <module name="org.apache.commons.logging"/> <module name="org.apache.log4j"/> <module name="org.jboss.logging"/> <module name="org.jboss.logmanager"/> <module name="org.jboss.logmanager.log4j"/> <module name="org.slf4j"/> <module name="org.slf4j.impl"/> </exclusions> </deployment> </jboss-deployment-structure>
2. 修正Log4j2依赖配置
在pom.xml中确保Log4j2依赖完整且无冲突:
<dependencies> <!-- Log4j2核心API与实现 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.20.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.20.0</version> </dependency> <!-- 若用SLF4J桥接,必须添加此依赖 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.20.0</version> </dependency> </dependencies>
执行mvn dependency:tree排查重复依赖,比如旧版log4j1.x或其他SLF4J绑定实现,直接排除冲突项。
3. 验证Log4j2配置文件与权限
- 确认
log4j2.xml放在src/main/resources下,打包后位于WAR的WEB-INF/classes目录中; - 检查
FileAppender的日志路径是否有写入权限,手动在服务器上创建文件测试写入; - 核对日志级别:若根日志级别设为
ERROR,INFO或DEBUG级别的日志会被过滤,确保配置的级别匹配需求:
<Root level="info"> <AppenderRef ref="File"/> </Root>
4. 确认代码日志初始化方式
确保代码中使用Log4j2原生API,避免混用其他框架:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class DemoService { private static final Logger logger = LogManager.getLogger(DemoService.class); public void testLog() { logger.info("手动触发日志测试"); // 调用此方法验证是否写入 } }
若用SLF4J,必须保证log4j-slf4j-impl依赖已正确引入,否则SLF4J会绑定到JBoss自带的日志实现。
5. 查看JBoss服务器日志
检查JBoss的server.log或对应域的日志文件,查找是否有Log4j2相关报错,比如配置解析失败、依赖加载异常、权限拒绝等,这些信息能直接定位问题根源。
内容的提问来源于stack exchange,提问作者Bimal S KIRAN
相关产品推荐
相关产品推荐

