WildFly 10部署多应用时如何分别配置独立Log4j配置文件?
在WildFly 10中为不同应用配置独立Log4j配置文件的方案
嘿,我来给你捋捋解决办法:你已经通过全局的system-property给Application_A指定了Log4j配置,但这种全局配置会作用于所有部署的应用,所以要给Application_B单独配置,得用应用级别的隔离方案,具体有两种常用方式:
方式一:通过WildFly模块(module)管理独立配置
这种方式适合配置文件不想打包到应用包,或者需要多个应用共享某份配置的场景:
创建Application_B专属的Log4j模块
- 在WildFly的
modules目录下创建模块路径:modules/com/applicationB/log4j/main - 将Application_B的Log4j配置文件(比如
log4j_apps_b.xml)放到这个目录里 - 同目录下创建
module.xml文件,内容如下:<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.3" name="com.applicationB.log4j"> <resources> <resource-root path="log4j_apps_b.xml"/> </resources> <dependencies> <module name="org.apache.log4j"/> </dependencies> </module>
- 在WildFly的
在Application_B部署包中添加
jboss-deployment-structure.xml- 如果是Web应用,把这个文件放到
WEB-INF目录;如果是Jar应用,放到META-INF目录,内容如下:<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <!-- 排除容器全局的Log4j依赖,避免和Application_A的配置冲突 --> <exclusions> <module name="org.apache.log4j" slot="main"/> </exclusions> <!-- 引入我们刚创建的Application_B专属Log4j模块 --> <dependencies> <module name="com.applicationB.log4j" export="true"/> </dependencies> <!-- 指定该应用使用模块中的Log4j配置文件 --> <properties> <property name="log4j.configurationFile" value="log4j_apps_b.xml"/> </properties> </deployment> </jboss-deployment-structure>
- 如果是Web应用,把这个文件放到
方式二:将配置文件打包到Application_B部署包
如果不想用模块,直接把配置文件打包到应用里更简单:
把
log4j_apps_b.xml放到Application_B的源码目录- Web应用放
src/main/webapp/WEB-INF/classes,Jar应用放src/main/resources,这样打包后会在类路径下
- Web应用放
同样添加
jboss-deployment-structure.xml- 内容和方式一类似,只是配置路径改成类路径:
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <exclusions> <module name="org.apache.log4j" slot="main"/> </exclusions> <properties> <!-- 类路径下的配置文件 --> <property name="log4j.configurationFile" value="classpath:log4j_apps_b.xml"/> </properties> </deployment> </jboss-deployment-structure>
- 内容和方式一类似,只是配置路径改成类路径:
关键注意点
- 一定要排除全局的
org.apache.log4j模块,不然应用会默认使用全局的log4j.configurationFile配置,导致两个应用共用同一份日志配置 - 两种方式都不需要修改
standalone-full.xml里的全局system-property,这样Application_A的配置不受影响
内容的提问来源于stack exchange,提问作者Pete Long
相关产品推荐
相关产品推荐

