Google Spring Cloud logback-json-appender缺失线程类名信息如何解决
解决方案
你可以通过覆盖Spring Cloud GCP预置CONSOLE_JSON追加器的默认消息格式变量实现需求,无需自定义追加器,仅需在现有Logback配置中增加一行属性配置即可。
核心原理
Google官方提供的logback-json-appender.xml中,预定义了CONSOLE_JSON_PATTERN变量控制JSON日志中message字段的输出格式,默认仅包含日志内容本身,你可以自定义该变量值,将需要的线程名、包类信息等格式占位符加入即可。
具体修改步骤
- 在你现有Logback配置的三个
include标签之后,新增CONSOLE_JSON_PATTERN属性配置,参考格式可以和你本地控制台输出格式保持一致:
<property name="CONSOLE_JSON_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{30} - %msg%n"/>
- 其他配置无需任何改动,直接发布即可生效。
修改后完整配置示例
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <include resource="com/google/cloud/spring/logging/logback-json-appender.xml"/> <include resource="org/springframework/boot/logging/logback/console-appender.xml" /> <!-- 新增配置:覆盖CONSOLE_JSON的默认消息格式 --> <property name="CONSOLE_JSON_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{30} - %msg%n"/> <springProperty scope="context" name="SERVICE_NAME" source="logging.service"/> <springProperty scope="context" name="APP_NAME" source="logging.app"/> <springProperty scope="context" name="ENVIRONMENT" source="logging.environment"/> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight %cyan(%-5level) %logger{30} - %msg%n</pattern> </encoder> </appender> <springProfile name="npr"> <root level="INFO"> <appender-ref ref="CONSOLE_JSON"/> </root> </springProfile> <springProfile name="prd"> <root level="INFO"> <appender-ref ref="CONSOLE_JSON"/> </root> </springProfile> <springProfile name="local"> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </springProfile> </configuration>
生效效果
修改后JSON日志的message字段会包含时间、线程名、日志级别、缩写包类名、日志内容,Cloud Run日志列表和Google Logs Explorer的预览行可以直接看到完整信息,无需点击展开jsonPayload。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

