WildFly中如何覆盖WAR包内log4j配置,将指定包日志输出至server.log
当然可以!WildFly自带了一套成熟的日志子系统,我们完全可以通过它覆盖WAR包内部的log4j配置,把com.ibm.presentation包的日志定向到默认的server.log里。下面是具体的操作步骤:
方法一:通过jboss-cli命令行配置(推荐)
连接到WildFly命令行客户端
打开终端,进入WildFly的bin目录,执行:./jboss-cli.sh --connectWindows系统替换为
jboss-cli.bat即可。添加目标包的日志记录器
连接成功后,在命令行里执行以下命令,把com.ibm.presentation包的日志级别设为debug(和你WAR包配置一致),并关联到WildFly默认的控制台与文件处理器:/subsystem=logging/logger=com.ibm.presentation:add(level=DEBUG, handlers=["CONSOLE","FILE"])这里的
FILE处理器就是对应server.log的文件输出,配置后日志会同时输出到控制台和日志文件。禁用WAR包自带的log4j配置(关键步骤)
WildFly默认会优先使用应用内的日志配置,所以我们需要在WAR包的META-INF目录下创建jboss-deployment-structure.xml文件,内容如下:<jboss-deployment-structure> <deployment> <exclude-subsystems> <subsystem name="logging"/> </exclude-subsystems> <exclusions> <module name="org.apache.log4j"/> </exclusions> </deployment> </jboss-deployment-structure>这个文件的作用是让WildFly忽略应用内的log4j配置,强制使用服务器端的日志子系统规则。
方法二:直接修改服务器配置文件
如果不想每次部署都调整WAR包,也可以直接修改WildFly的主配置文件:
- 打开
standalone/configuration/standalone.xml(域模式下对应domain.xml)。 - 在
<subsystem xmlns="urn:jboss:domain:logging:X.Y">节点下,添加以下日志记录器配置:<logger category="com.ibm.presentation"> <level name="DEBUG"/> <handlers> <handler name="CONSOLE"/> <handler name="FILE"/> </handlers> </logger> - 同样需要确保WAR包包含上述的
jboss-deployment-structure.xml文件,排除掉应用内的日志配置,否则服务器端的设置会被覆盖。
验证配置效果
完成所有配置后,重启WildFly服务器并部署WAR包。打开standalone/log/server.log文件,你就能看到com.ibm.presentation包下的debug级别日志了。
如果你之前尝试添加日志记录器没成功,大概率是没排除应用内的log4j配置,导致服务器端的设置被WAR包的配置覆盖了,补上jboss-deployment-structure.xml就能解决这个问题。
内容的提问来源于stack exchange,提问作者daniel sp

