我在0.8.8
中配置了两个追加器。
logback.xml
大多数日志将使用STDOUT附加程序。但是,某些日志需要使用JSON格式。
对于普通日志,我使用的是Slf4j的<configuration>
<appender name="json" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
<jsonFormatter class="com.nike.ship.shipmentrepository.logging.ShipRepoJsonFormatter">
<prettyPrint>false</prettyPrint>
</jsonFormatter>
<timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSS'Z'</timestampFormat>
<timestampFormatTimezoneId>UTC</timestampFormatTimezoneId>
</layout>
</encoder>
</appender>
<appender name="STDOUT" class="io.symphonia.lambda.logging.DefaultConsoleAppender">
<encoder>
<pattern>%d{"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", UTC} %X{AWSRequestId:-" + NO_REQUEST_ID + "} %.-6level %logger{5} - %msg 
%replace(%ex){'\n','
'}%nopex%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
<logger name="jsonLogger" level="INFO">
<appender-ref ref="json"/>
</logger>
</configuration>
,然后将使用我的STDOUT附加程序。
对于JSON日志,我创建了一个自定义记录器,引用了log.info()
中的jsonlogger
:logback.xml
然后,我使用此记录器记录带有消息mdc context .. private static final Logger jsonLogger = LoggerFactory.getLogger("jsonLogger");
这为我提供了预期的JSON格式的日志,但它还会按照我的STDOUT附加程序中指定的模式记录一条额外的行。
jsonLogger.info(message);
当我为当前记录器使用JSON附加程序时,为什么它以STDOUT附加程序的格式记录最后一个额外的日志行?