如何让Logback Marker输出无方括号?用于日志分类隔离
解决Logback Marker输出log_type为字符串而非数组的问题
因为你所有的Marker都只有单个类别,要把"log_type":["APPLICATION"]改成"log_type": "APPLICATION",有两种简单方案:
方案一:用Logstash编码器自带配置(推荐)
如果你用的是logstash-logback-encoder,直接在编码器配置里调整Marker的输出规则就行,不用写代码:
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <!-- 保留你原来的其他字段配置 --> <marker> <!-- 指定输出字段名为log_type --> <fieldName>log_type</fieldName> <!-- 开启单字段模式,直接输出Marker名称而非数组 --> <singleField>true</singleField> </marker> </providers> </encoder>
方案二:自定义Logback转换器
如果不想依赖Logstash编码器的特性,可以自己写个转换器来处理Marker:
- 写一个自定义转换器类:
import ch.qos.logback.classic.pattern.MarkerConverter; import ch.qos.logback.classic.spi.ILoggingEvent; public class SingleMarkerConverter extends MarkerConverter { @Override public String convert(ILoggingEvent event) { if (event.getMarker() == null) { return "\"\""; } // 直接返回带引号的Marker名称 return "\"" + event.getMarker().getName() + "\""; } }
- 在Logback配置文件里注册并使用这个转换器:
<configuration> <!-- 注册自定义转换器,指定转换词为singleMarker --> <conversionRule conversionWord="singleMarker" converterClass="你的包路径.SingleMarkerConverter" /> <appender name="JSON_APPENDER" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <pattern> <pattern> { "log_type": %singleMarker, <!-- 其他字段配置保持不变 --> "@timestamp": "%date{ISO8601}" } </pattern> </pattern> </providers> </encoder> </appender> </configuration>
内容的提问来源于stack exchange,提问作者snp
相关产品推荐
相关产品推荐

