Logback 預設通常是會輸出一行一行純文字的 log,不過如果想要輸出 JSON 格式的話,也有看起來應該是第三方貢獻給 logback 的 extension 可以使用。
Maven 設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
< properties > < slf4j.version >1.7.26</ slf4j.version > < logback.version >1.2.3</ logback.version > < logback.contrib.version >0.1.5</ logback.contrib.version > < jackson.version >2.9.9</ jackson.version > </ properties > < dependencies > < dependency > < groupId >org.slf4j</ groupId > < artifactId >slf4j-api</ artifactId > < version >${slf4j.version}</ version > </ dependency > < dependency > < groupId >ch.qos.logback</ groupId > < artifactId >logback-core</ artifactId > < version >${logback.version}</ version > </ dependency > < dependency > < groupId >ch.qos.logback.contrib</ groupId > < artifactId >logback-jackson</ artifactId > < version >${logback.contrib.version}</ version > </ dependency > < dependency > < groupId >ch.qos.logback.contrib</ groupId > < artifactId >logback-json-classic</ artifactId > < version >${logback.contrib.version}</ version > </ dependency > < dependency > < groupId >com.fasterxml.jackson.core</ groupId > < artifactId >jackson-databind</ artifactId > < version >${jackson.version}</ version > </ dependency > </ dependencies > |
除了 SLF4J 和 logback 本身以外,還需要 logback-json-classic,以及因為它使用 Jackson 來做 JSON 處理,所以需要 logback-jackson 和 jackson。
logback.xml 設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<? xml version = "1.0" encoding = "UTF-8" ?> < configuration > < appender name = "JSON_STDOUT" class = "ch.qos.logback.core.ConsoleAppender" > < encoder class = "ch.qos.logback.core.encoder.LayoutWrappingEncoder" > < layout class = "ch.qos.logback.contrib.json.classic.JsonLayout" > < timestampFormat >yyyy-MM-dd'T'HH:mm:ss.SSSX</ timestampFormat > < timestampFormatTimezoneId >Etc/UTC</ timestampFormatTimezoneId > < jsonFormatter class = "ch.qos.logback.contrib.jackson.JacksonJsonFormatter" > < prettyPrint >true</ prettyPrint > </ jsonFormatter > </ layout > </ encoder > </ appender > < root level = "ALL" > < appender-ref ref = "JSON_STDOUT" /> </ root > </ configuration > |
這裡很單純就設定了輸出時要用 JSON,並且其中的時間格式應該要符合我設定的格式,然後要求它輸出時要 pretty print(做好縮排等格式化)。
輸出範例
1 2 3 4 5 6 7 8 |
{ "timestamp" : "2019-09-28T13:04:25.013Z", "level" : "TRACE", "thread" : "main", "logger" : "test.App", "message" : "test writing log.", "context" : "default" } |
沒有留言:
張貼留言