我正在将Unicode字符写入Log4J2日志。在一台计算机上(Windows 8),我在日志中看到了这一点:
2016-08-30 16:44:00.958|English: The quick brown fox jumped over the lazy dog.
2016-08-30 16:44:00.960|German: Falsches Üben von Xylophonmusik quält jeden größeren Zwerg.
2016-08-30 16:44:00.960|Russian 1: В чащах юга жил бы цитрус? Да, но фальшивый экземпляр!
2016-08-30 16:44:00.960|Russian 2: Съешь же ещё этих мягких французских булок да выпей чаю.
2016-08-30 16:44:00.960|Chinese: 中国智造,慧及全球
2016-08-30 16:44:00.960|Japanese: いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす
2016-08-30 16:44:00.960|Korean: 다람쥐 헌 쳇바퀴에 타고파
在另一台计算机上(Windows Server 2012R2),我看到以下内容:
2016-08-30 16:50:41.676|English: The quick brown fox jumped over the lazy dog.
2016-08-30 16:50:41.676|German: Falsches Üben von Xylophonmusik quält jeden größeren Zwerg.
2016-08-30 16:50:41.676|Russian 1: ? ????? ??? ??? ?? ??????? ??, ?? ????????? ?????????!
2016-08-30 16:50:41.676|Russian 2: ????? ?? ??? ???? ?????? ??????????? ????? ?? ????? ???.
2016-08-30 16:50:41.676|Chinese: ?????????
2016-08-30 16:50:41.676|Japanese: ??????? ????? ?????? ????? ??????? ????? ??????? ?????
2016-08-30 16:50:41.676|Korean: ??? ? ???? ???
如果Log4J2默认情况下写入UTF-8,为什么第二个系统上的日志文件仅包含问号?也就是说,第二个系统可能(并且可能是)缺少字体,但是当我希望使用hexdump工具看到至少UTF-8字符的二进制文件时,第二个系统上的日志文件本身包含实际的问号。在文件中。换句话说,如果执行写入的过程是使用Unicode字符的JVM,那么我可以理解为什么未知字符可能会错误地呈现,而我只是不理解为什么未将正确的Unicode写入文件。
最佳答案
您是否尝试在Log4j配置文件中为Log4j布局强制使用UTF-8字符集?例如,使用PatternLayout
:
<Configuration ...>
...
<PatternLayout pattern="..." charset="UTF-8"/>
...
</Configuration>
有关Log4j编码问题的更多信息,请参见https://logging.apache.org/log4j/2.x/manual/layouts.html。
关于java - 当我编写相同的UTF-8时,为什么Log4J2输出在两个系统上不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39256601/