如何从类路径外读取log4j.properties?JBoss服务器加载方法
从WildFly服务器目录加载log4j.properties的方法
当然有办法实现!WildFly(原JBoss)的模块系统正好可以帮你把服务器端的log4j配置文件纳入类路径,不用把配置打包到项目里。下面是具体步骤:
方法一:通过WildFly模块加载配置(推荐)
这是最符合WildFly规范的做法,能让配置文件被服务器的类路径识别,管理起来更规范:
创建模块目录结构
在WildFly的modules目录下创建对应层级的文件夹,比如你提到的wildfly/modules/x/y/,然后在里面新建main子目录(WildFly模块的标准结构):wildfly/modules/x/y/main/放置配置文件并编写module.xml
- 把你的
log4j.properties放到刚才创建的main目录里。 - 在同一个目录下创建
module.xml文件,内容如下:<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.3" name="x.y"> <resources> <!-- 引入log4j配置文件 --> <resource-root path="log4j.properties"/> <!-- 如果你的项目依赖log4j的jar包,也可以在这里添加,比如: <resource-root path="log4j-1.2.17.jar"/> --> </resources> <!-- 声明必要的依赖 --> <dependencies> <module name="org.apache.log4j"/> </dependencies> </module>
- 把你的
关联模块到应用或服务器
- 如果是单个应用需要使用这个配置,在项目的
jboss-deployment-structure.xml(放在WEB-INF或META-INF目录下)里添加依赖:<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <module name="x.y" export="true"/> </dependencies> </deployment> </jboss-deployment-structure> - 如果要让所有应用都共享这个配置,可以修改WildFly的
standalone.xml或domain.xml,在<subsystem xmlns="urn:jboss:domain:ee:5.0">节点下添加全局模块:<global-modules> <module name="x.y" slot="main"/> </global-modules>
- 如果是单个应用需要使用这个配置,在项目的
方法二:通过启动参数指定配置路径
如果你不想折腾模块系统,也可以直接在WildFly的启动脚本里添加JVM参数,强制log4j加载指定路径的配置文件:
- 打开WildFly的启动脚本(比如
standalone.sh或standalone.bat)。 - 在
JAVA_OPTS参数中添加以下配置:# Linux/macOS环境 JAVA_OPTS="$JAVA_OPTS -Dlog4j.configuration=file:/path/to/wildfly/modules/x/y/log4j.properties"# Windows环境 set "JAVA_OPTS=%JAVA_OPTS% -Dlog4j.configuration=file:C:\path\to\wildfly\modules\x\y\log4j.properties"注意:这里必须加上
file:前缀,否则log4j会默认从类路径查找文件。
内容的提问来源于stack exchange,提问作者Martin Plávek
相关产品推荐
相关产品推荐

