如何在JBOSS 8/WildFly 28中排除自定义异常的日志输出?
解决WildFly 28/JBoss 8中自定义异常日志无法屏蔽的问题
你当前配置的问题在于:日志并非从SilentException类本身输出,而是由抛出它的业务类(比如A类)或者WildFly容器的异常处理组件(如EJB调用处理器、Web容器异常拦截器)输出的,仅关闭package1.exception.SilentException这个Logger的级别无法拦截这些来源的日志。
以下是可行的解决方法:
1. 定位实际输出日志的Logger
先查看服务器日志中SilentException堆栈对应的Logger名称(日志条目前方通常会显式标记,比如[com.example.ClassA]或[org.jboss.as.ejb3.invocation]),确认是哪个Logger在输出该异常。
2. 为日志处理器添加过滤规则
直接针对输出日志的日志处理器(如控制台处理器CONSOLE、文件处理器FILE)添加过滤器,过滤掉包含SilentException的日志条目。修改standalone-full.xml中的logging子系统:
示例:为文件日志处理器添加过滤
<subsystem xmlns="urn:jboss:domain:logging:8.0"> <!-- 其他配置 --> <periodic-rotating-file-handler name="FILE"> <formatter> <named-formatter name="PATTERN"/> </formatter> <file relative-to="jboss.server.log.dir" path="server.log"/> <suffix value=".yyyy-MM-dd"/> <append value="true"/> <!-- 添加以下过滤器配置 --> <filter> <not> <match pattern=".*package1.exception.SilentException.*"/> </not> </filter> </periodic-rotating-file-handler> <!-- 其他配置 --> </subsystem>
示例:为控制台日志处理器添加过滤
<console-handler name="CONSOLE"> <formatter> <named-formatter name="COLOR-PATTERN"/> </formatter> <!-- 添加以下过滤器配置 --> <filter> <not> <match pattern=".*package1.exception.SilentException.*"/> </not> </filter> </console-handler>
3. 检查代码中的手动日志输出
如果业务代码中存在try-catch捕获SilentException并手动打印日志的逻辑(比如logger.error("xxx", e)),需要直接修改代码移除该日志语句,或者将对应Logger的级别调整为OFF。
4. 验证配置生效
修改配置后重启WildFly,触发异常后检查日志,确认SilentException的堆栈不再输出。也可以通过JBoss CLI验证配置是否加载:
jboss-cli.sh --connect /subsystem=logging/logger=package1.exception.SilentException:read-resource
内容的提问来源于stack exchange,提问作者user1169587
相关产品推荐
相关产品推荐

