如何使用SLF4J修改日志级别标签 将WARN替换为WARNING
零编码快速实现方案
你之前试的Log4j2自定义Logger的方向完全没必要,你当前项目用的是SLF4J+Logback技术栈,既不用换日志框架,也不用自定义编码器,只需要修改logback.xml配置就能实现需求。
Logback本身内置了字符串替换的转换符,配合logstash日志编码器的pattern配置项,可以直接在配置层完成WARN到WARNING的映射,全程不需要写任何Java代码:
- 删掉原有
<providers>标签下的<logLevel>和<message>两个节点 - 在
<providers>下新增<pattern>节点,直接定义level和msg字段的输出规则,用内置替换规则把级别输出的WARN替换为WARNING,其余日志级别(DEBUG/INFO/ERROR/TRACE)不受任何影响
修改后的核心编码器配置如下:
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <pattern> <pattern> {"level": "%replace(%level){'WARN','WARNING'}", "msg": "%message"} </pattern> </pattern> <arguments> <includeNonStructuredArguments>false</includeNonStructuredArguments> </arguments> <stackTrace> <fieldName>stack</fieldName> </stackTrace> </providers> </encoder>
改完配置重启服务,再执行LOG.warn("test")就会输出你要的{"level":"WARNING","msg":"test"}结构日志。这个替换规则只作用于级别字段,不会误替换日志正文里的WARN文本。
你之前跑Log4j2生成工具报错,是因为执行命令时classpath只加了log4j-core包,缺了log4j-api依赖,而且这套方案和你当前用的Logback栈不兼容,不用再尝试了。
内容的提问来源于stack exchange,提问作者Frédéric Sauvage
相关产品推荐
相关产品推荐

