如何將Spring Boot應用中日誌輸出格式改為JSON?-DEV
今天,我們有了一類稱為日誌聚合系統的應用程式。當我們擁有大量微服務並且我們希望跨微服務跟蹤日誌時,日誌聚合很有用。
傳統的Java應用程式日誌如下所示:
2020-09-17 21:56:10.740 INFO [Orders:restartedMain::] o.s.b.w.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path '' |
使用下面方法對日誌進行搜尋:
cat application.log | grep <your-search> |
有人想出了這種不同的方法,為什麼在主要用於搜尋時為什麼不以更可搜尋的格式儲存日誌。JSON碰巧很容易被搜尋到,從而進行JSON日誌記錄。另一種引用方式是結構化日誌,因為日誌具有定義明確的結構,以後可以用來搜尋。
以JSON格式顯示的相同應用程式日誌如下所示:
{ "@timestamp": "2020-06-17T14:41:11.174-04:00", "@version": "1", "message": "Tomcat initialized with port(s): 8080 (http)", "logger_name": "org.springframework.boot.web.embedded.tomcat.TomcatWebServer", "thread_name": "restartedMain", "level": "INFO", "level_value": 20000 } |
要以JSON格式記錄日誌,需要包含2個依賴項。如果您使用maven進行依賴性管理,則將包括以下依賴性
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.4</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> |
在這裡,我們使用的是logstash-logback-encoder庫
然後,我們可以使用以下程式碼段將json編碼器配置為logback
<encoder class="net.logstash.logback.encoder.LogstashEncoder"> <providers> <timestamp> <timeZone>EST</timeZone> </timestamp> <pattern> <pattern> { "level": "%level", "service": "orders", "traceId": "%X{X-B3-TraceId:-}", "spanId": "%X{X-B3-SpanId:-}", "thread": "%thread", "class": "%logger{40}", "message": "%message" } </pattern> </pattern> <stackTrace> <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter"> <maxDepthPerThrowable>30</maxDepthPerThrowable> <maxLength>2048</maxLength> <shortenedClassNameLength>20</shortenedClassNameLength> <rootCauseFirst>true</rootCauseFirst> </throwableConverter> </stackTrace> </providers> </encoder> |
因此,讓我們假設您想將資料作為傳統日誌記錄到控制檯,並將它們作為json記錄到檔案,我們可以如下配置logback xml:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/console.xml"/> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [Orders:%thread:%X{X-B3-TraceId}:%X{X-B3-SpanId}] %logger{40} - %msg%n </pattern> </encoder> </appender> <appender name="fileout" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>./logs/orders.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <maxIndex>8</maxIndex> <FileNamePattern>./logs/orders.log.%i </FileNamePattern> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>128MB</MaxFileSize> </triggeringPolicy> <encoder class="net.logstash.logback.encoder.LogstashEncoder"> <providers> <timestamp> <timeZone>EST</timeZone> </timestamp> <pattern> <pattern> { "level": "%level", "service": "orders", "traceId": "%X{X-B3-TraceId:-}", "spanId": "%X{X-B3-SpanId:-}", "thread": "%thread", "class": "%logger{40}", "message": "%message" } </pattern> </pattern> <stackTrace> <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter"> <maxDepthPerThrowable>30</maxDepthPerThrowable> <maxLength>2048</maxLength> <shortenedClassNameLength>20</shortenedClassNameLength> <rootCauseFirst>true</rootCauseFirst> </throwableConverter> </stackTrace> </providers> </encoder> </appender> <root level="info"> <appender-ref ref="fileout" /> <appender-ref ref="stdout" /> </root> </configuration> |
有關帶有json日誌記錄的完整spring boot應用程式,請參閱示例應用程式訂單或發貨
相關文章
- Golang:將日誌以Json格式輸出到KafkaGolangJSONKafka
- Spring Boot 將jar包釋出方式改為War包Spring BootJAR
- SparkSQL,如何將DataFrame轉為json格式SparkSQLJSON
- 如何將Excel檔案解析為json格式ExcelJSON
- Spark SQL,如何將 DataFrame 轉為 json 格式SparkSQLJSON
- 將輸入的字元轉化為int格式輸出字元
- 24【線上日誌分析】之Tomcat的支援log4j,日誌輸出為json格式TomcatJSON
- 23【線上日誌分析】之改造CDH的HDFS的NN,DN程式,日誌輸出為json格式JSON
- Python將xml格式轉換為json格式PythonXMLJSON
- Spring boot應用如何支援httpsSpring BootHTTP
- 如何預熱Spring Boot應用? - sebsteinSpring Boot
- Spring Boot Filter中擷取響應輸出內容Spring BootFilter
- js將xml格式內容轉換為json格式XMLJSON
- 如何優雅地停止 Spring Boot 應用?Spring Boot
- JavaScript將物件轉換為JSON格式字串JavaScript物件JSON字串
- eval()將JSON格式字串轉換為物件JSON字串物件
- JavaScript將JSON格式字串轉換為物件JavaScriptJSON字串物件
- js將日期輸出為YYYY/mm/dd格式程式碼例項JS
- Spring Boot + MYSQL + Docker的配置 - DEVSpring BootMySqlDockerdev
- 【c++】c++格式控制輸出簡單應用C++
- 如何用 Linux 命令列工具解析和格式化輸出 JSONLinux命令列JSON
- EXCEL中日期格式轉換為文字格式-函式TEXTExcel函式
- Spring Boot中如何使用Ostara監控應用?Spring Boot
- MyBatis中日誌MyBatis
- 將任意格式轉換為JSON資料格式的工具類JSON
- Spring Boot 和 Spring Cloud 應用記憶體如何管理?Spring BootCloud記憶體
- Spring Boot mybatis-config 和 log4j 輸出sql 日誌Spring BootMyBatisSQL
- 關於json格式化輸出json.MarshalIndent()的使用JSON
- Spring Boot如何生成swagger.json?Spring BootSwaggerJSON
- 使用plsql 匯出欄位為json 格式SQLJSON
- window格式改為unix格式
- Spring Boot (十九):使用 Spring Boot Actuator 監控應用Spring Boot
- spring-boot-plus1.1.0.釋出-整合Spring Boot Admin管理和監控應用Spring Boot
- python如何輸出日誌?Python
- 如何將開發環境的 Spring Boot 應用程式記憶體降低 40% 以上開發環境Spring Boot記憶體
- javascript如何將字串轉換成json格式物件JavaScript字串JSON物件
- Spring Native釋出:使用GraalVM將Spring應用編譯為本機映象SpringLVM編譯
- jquery實現將字串轉換為json格式物件jQuery字串JSON物件