問題
Springboot程序在接入ELK時,需要引入依賴logstash
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>${logback-encoder.version}</version>
</dependency>
還需在日志文件中配置一下logstash的日志輸出格式、名稱等
<appender name="SYSTEM_FILE_JSON" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.path}/apps.json</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
${log.path}/apps.%d{yyyyMMdd}.json.zip
</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<mdc/>
<pattern>
<pattern>
{
"project":"${project.name}",
"app":"${spring.application.name}",
"host":"${hostName}",
"@timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss.SSSZZ}",
"logger": "%logger",
"level": "%level",
"thread": "%thread",
"msg":"%message"
}
</pattern>
</pattern>
<!--
<logLevelValue/>
-->
<callerData>
<fieldName>caller</fieldName>
<classFieldName>class</classFieldName>
<methodFieldName>method</methodFieldName>
<!--
<fileFieldName>file</fileFieldName>
-->
<lineFieldName>line</lineFieldName>
</callerData>
<stackTrace>
<throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
<maxDepthPerThrowable>100</maxDepthPerThrowable>
<rootCauseFirst>true</rootCauseFirst>
<inlineHash>true</inlineHash>
</throwableConverter>
</stackTrace>
</providers>
</encoder>
</appender>
配置好了,啟動程序查看輸出到文件中的日志,中文變成了unicode編碼,檢查了配置沒啥問題,編碼都是UTF-8呀~
解決方案
最后嘗試了很多種方案,在網上找到一個方案是有效果的
image.png
參考鏈接
http://www.kailing.pub/article/index/arcid/214.html
https://www.jiweichengzhu.com/article/2f98919d236a4577aab22cd4057fd6fa
https://blog.csdn.net/wang0120000/article/details/105097417