问题
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