最近弄公司的一个springboot项目,启动后一看到console输入日志乱码,想到在tomcat中设置jvm启动参数设置
在tomcat中设置VM Options -Dfile.encoding=UTF-8,设置后依旧乱码
后来发现我的tomcat Catalina Log 默认是GBK格式,修改后tomcat console日志已是中文,but新问题又来了, 项目日志还是乱码,之前用spring springMVC 项目中都用log4j,我想应该就是log4j的问题,结果没有找到,只看到一个logback-spring.xml的配置文件,发现问题也确实就出在这里
logback-spring.xml中引用springboot的logback/base.xml文件,base.xml又引用console-appender和file-appender,console-appender.xml中charset默认utf8,
<include resource="org/springframework/boot/logging/logback/base.xml" />
<?xml version="1.0" encoding="UTF-8"?>
<!--
Base logback configuration provided for compatibility with Spring Boot 1.1
-->
<included>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</included>
<included>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
</included>
第一种解决方法:自定义配置logback-spring.xml,配置日志级别和彩色日志,随你喜欢
logback中控制日志框架本身的日志级别从低往高依次: TRACE-->DEBUG-->INFO-->WARN-->ERROR-->FATAL
前面说到我的tomcat为GBK编码,所以我只好在logback-spring.xml中配置一段,并将charset注释掉,则获取默认格式,到此问题终于解决
<!--CONSOLE输出设置-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--彩色日志,格式化输出:%d表示日期,%-5level:级别从左显示5个字符宽度, %thread表示线程名,%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) --- %green([%thread]) %logger - %blue(%msg%n)</pattern>
<!--设置输出格式UTF-8/GBK 如果不设置,则获取默认格式-->
<!--<charset>UTF-8</charset>-->
</encoder>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
第二种解决方法:较简单的解决方法
1. IDEA安装目录bin目录下如下2个文件,打开编辑,最后一行加: -Dfile.encoding=UTF-8,
2. tomcat也需要加 -Dfile.encoding=UTF-8,
3. logback-spring.xml中引用springboot的logback/base.xml文件,不对console做修改,最后重启IDEA