Gar*_*son 10 java logging utf-8 logback character-encoding
如果用户没有设置默认字符集,Logback 1.1.3 LayoutWrappingEncoder文档没有说明默认字符集是什么,但源代码说:
默认情况下,此属性的值为null,对应于系统的默认字符集.
但是我正在使用PatternLayoutEncoder(带有a RollingFileAppender),它似乎是以UTF-8输出文件(我的Windows 7 Professional系统的默认字符集可能不是UTF-8).
UTF-8输出实际上是我想要的,但我想确保我没有偶然得到这个,因为文档似乎表明了别的东西.那么为什么当我没有明确指定一个字符集时,Logback会给我UTF-8输出?
and*_*vin 15
Logback字符编码
你可以<charset>在你的定义中使用,PatternLayoutEncoder因为这是一个子类LayoutWrappingEncoder,它提供了setCharset方法.这在文档中由类的摘录中指出,但没有给出示例xml配置.对于LayoutWrappingEncoder,这里给出了答案:[Logback-user]:如何使用UTF-8.
因此,如果您通过代码进行配置,则可以setCharset使用UTF-8 调用该方法.或者,如果您通过xml配置,这是:
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<charset>UTF-8</charset>
<outputPatternAsHeader>true</outputPatternAsHeader>
<pattern>[%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
Run Code Online (Sandbox Code Playgroud)
默认文件编码
Logback的文档说明使用了默认字符编码是正确的.Windows上的默认字符集通常不是UTF-8(windows-1252例如我的).正确的做法是将logback配置为UTF-8,如上所述.即使logback从某个地方挑选UTF-8,或者file.encoding某种程度上由你设置,也没有任何保证,这将在未来发生.
顺便说一下,如果你在Oracle VM上设置这个,那么Sun之前曾说过file.encoding:
J2SE平台规范不要求"file.encoding"属性; 它是Sun实现的内部细节,不应由用户代码检查或修改.它也是只读的; 在技术上不可能支持在命令行或程序执行期间的任何其他时间将此属性设置为任意值.
Eclipse和Maven
如果您正在从eclipse运行maven并且您已经将环境设置为UTF-8,无论是环境/项目还是运行配置(对于我在公共选项卡中),那么eclipse将安排新JVM使用UTF通过设置-8编码file.encoding.请参阅:Eclipse的编码文档
| 归档时间: |
|
| 查看次数: |
8312 次 |
| 最近记录: |