如何在JBOSS EAP/Wildfly中为war包内的jar生成独立日志文件
JBOSS EAP 7.4 实现war内指定jar包日志独立输出配置方案
1. 匹配日志实现优先级(二选一即可)
方案A:使用JBOSS容器自带日志子系统(推荐,无需修改应用包)
无需调整应用结构,直接使用你已创建的自定义handler完成配置即可。
方案B:使用应用自带log4j配置
JBOSS默认会优先使用容器自带的日志实现,忽略部署包内的log4j配置,需要在war包的WEB-INF目录下创建jboss-deployment-structure.xml,内容参考如下:
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <!-- 排除容器日志子系统拦截 --> <exclude-subsystems> <subsystem name="logging" /> </exclude-subsystems> <!-- 排除容器自带log4j模块,避免版本冲突 --> <exclusions> <module name="org.apache.log4j" /> </exclusions> <!-- 如果使用你自定义的log4j module,添加下方依赖配置,替换为自己的模块名 --> <dependencies> <module name="com.your.custom.log4j" export="true"/> </dependencies> </deployment> </jboss-deployment-structure>
2. 校验standalone.xml自定义handler配置
确认你提前创建的自定义handler配置符合规范,示例参考:
<subsystem xmlns="urn:jboss:domain:logging:8.0"> <!-- 第一个jar对应的日志handler,可按需调整滚动规则、格式 --> <periodic-rotating-file-handler name="JAR1_HANDLER" autoflush="true"> <formatter> <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%c] (%t) %s%E%n"/> </formatter> <file relative-to="jboss.server.log.dir" path="jar1.log"/> <suffix value=".yyyy-MM-dd"/> <append value="true"/> </periodic-rotating-file-handler> <!-- 第二个jar对应的日志handler --> <periodic-rotating-file-handler name="JAR2_HANDLER" autoflush="true"> <formatter> <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%c] (%t) %s%E%n"/> </formatter> <file relative-to="jboss.server.log.dir" path="jar2.log"/> <suffix value=".yyyy-MM-dd"/> <append value="true"/> </periodic-rotating-file-handler> <!-- 原有其他handler配置保持不变 --> </subsystem>
3. 绑定包路径与对应handler
在logging子系统下新增两个logger配置,分别对应两个jar的根包名,注意设置use-parent-handlers="false"避免日志同时输出到server.log:
<!-- 替换为第一个jar的根包名 --> <logger category="com.example.jar1.root.package" use-parent-handlers="false"> <level name="INFO"/> <handlers> <handler name="JAR1_HANDLER"/> </handlers> </logger> <!-- 替换为第二个jar的根包名 --> <logger category="com.example.jar2.root.package" use-parent-handlers="false"> <level name="INFO"/> <handlers> <handler name="JAR2_HANDLER"/> </handlers> </logger>
4. 应用侧配置校验(使用方案B时需要)
- 已将编写好的log4j.xml放入war包的
WEB-INF/classes目录下 - 确认log4j配置中两个jar包的包路径、输出文件名配置正确
- 确认自定义module.xml的依赖、路径配置无错误
5. 生效验证
配置完成后重启JBOSS实例,重新部署war包,检查jboss.server.log.dir目录下是否生成两个独立的日志文件,同时校验server.log中不再输出这两个jar包的对应日志即可。
内容的提问来源于stack exchange,提问作者Arjun Ganta
相关产品推荐
相关产品推荐

