标签:style http io color ar os 使用 java sp
最近两年一直使用logback作为日志记录框架,一直很正常,今天突然遇到一个问题,日志框架控制台打印和记录文件的时候中文都是乱码了,解决办法如下:
在logback.xml中设置字符集即可。
<!-- 打印到控制台 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> [ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] - %msg%n </pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> </appender>
<!--DEBUG --> <appender name="LOG-DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <prudent>true</prudent> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <OnMatch>ACCEPT</OnMatch> <OnMismatch>DENY</OnMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>./logs/DEBUG-%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 保存前7天的日志文件 --> <maxHistory>7</maxHistory> </rollingPolicy> <!-- 如果超过10MB就删除 --> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>10MB</maxFileSize> </triggeringPolicy> <layout> <Pattern> [ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96}[%line] - %msg%n </Pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </layout> </appender>
查看官方文档说明
控制台输出用到的ConsoleAppendar和记录到文件用到的PollingFileAppender都继承自OutputStreamAppender,其中有个encoder属性,当写日志的时候会调用encoder的doEncode()方法。
查看Encoder的继承关系和配置文件可以看出控制台输出和文件输出都用到了LayoutWrappingEncoder,LayoutWrappingEncoder有个属性charset
private byte[] convertToBytes(String s) { if (charset == null) { return s.getBytes(); } else { try { return s.getBytes(charset.name()); } catch (UnsupportedEncodingException e) { throw new IllegalStateException( "An existing charset cannot possibly be unsupported."); } } } public void doEncode(E event) throws IOException { String txt = layout.doLayout(event); outputStream.write(convertToBytes(txt)); if (immediateFlush) outputStream.flush(); }
故设置charset为UTF-8即可解决问题
标签:style http io color ar os 使用 java sp
原文地址:http://my.oschina.net/u/1428349/blog/341826