Logback在idea Terminal中文乱码
环境:w10, idea2018, jdk1.8。
内容:mvn工程,写了一个main函数,pom中添加了springBoot依赖,用logback日志输出信息。
问题:用run命令,中文显示正常。但是,在Terminal,运行mvn spring-boot:run,中文乱码。
解决过程:
1.在网上搜了很多,大概总结有四条。
1.1 在pom文件里面加utf-8配置。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--增加jvm参数-->
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
</configuration>
</plugin>
Terminal下运行,还是中文乱码。
1.2 idea的安装bin目录下,在idea.exe.vmoptions、idea64.exe.vmoptions文件最末尾添加utf-8设置:
-Dfile.encoding=UTF-8
之前已经设置好了。应该就不是这个原因。
1.3 idea的setting->Build->Build Tools->Maven->Runner下配置VM Options:
-Dfile.encoding=GBK。
Terminal下运行,还是中文乱码。
改成:-Dfile.encoding=UTF-8。
也不行。
1.4 注释掉logback.xml中的<charset>行。(不知道为何)
Terminal下运行,还是中文乱码。
故障现象再次确认:
logback日志文件,配置utf-8字符集,运行run命令时,程序日志提示信息中文显示正常。 但是,在Terminal,运行mvn spring-boot:run,日志提示信息中文乱码。
咨询同事波哥,了解到一个情况:终端命令行运行程序,调用的是本地win10的字符集GBK,强改日志字符集为UTF-8无用。
解决办法:
logback日志配置文件中的字符集改为GBK,Terminal下运行,中文显示正常。
如果要run Main函数,再改下日志配置文件logback.xml的字符集为utf-8,中文日志提示信息才能正常显示。目前暂未找到两全其美的解决方法。
附 :logback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="30 seconds">
<property name="log.dir" value="target/logs"/>
<property name="encoding" value="UTF-8"/>
<property name="encoding2" value="GBK"/>
<property name="plain" value="%msg%n"/>
<property name="std" value="%d{HH:mm:ss.SSS}[%thread][%-5level]%msg %X"/>
<property name="normal" value="%d{yyyy-MM-dd:HH:mm:ss.SSS}[%thread][%-5level]%msg"/>
<!--控制台输出 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${plain}</pattern>
<charset>${encoding2}</charset>
</encoder>
</appender>
<!-- 时间滚动输出 level 为ALL 日志 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.dir}/file.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.dir}/file.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>${std}</pattern>
<charset>${encoding2}</charset>
</encoder>
</appender>
<logger name="root">
<level value="ERROR"/>
</logger>
<logger name="com.imooc">
<level value="DEBUG"/>
</logger>
<root>
<appender-ref ref="stdout"/>
<appender-ref ref="file"/>
</root>
</configuration>