如何解决日志中使用西里尔符号的问题



我刚刚添加了实现"org.zalando:loggeparent:2.14.0">
到我的基于"org.springframework.boot"版本"2.4.3"和Java 11的项目。

在application.yml下一个属性:

logbook:
format:
style: http
logging:
level:
org:
hibernate:
SQL: DEBUG
springframework:
web: DEBUG
security: INFO
zalando:
logbook: TRACE

来自spring的日志可以,看起来像"bankName": "ПОЧТА банк",但zalando.logbook:"bankName":"ПОЧТРбанк"

我在build.gradle中添加了next,但没有任何更改。

tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}

我需要做些什么来解决这个编码问题?

提前谢谢。

编辑:阅读日志我使用Kibana+弹性

当字符串变长时,通常意味着某些翻译步骤接收到的字节本应被视为UTF-8,但却使用ISO-8859或Cp1252或一些类似的旧编码读取。

以下是整个过程。每次我们从字节切换到字符,反之亦然,都会涉及到字符集编码。如果哪怕是一个步骤都涉及到错误的编码,那么最终的结果就是完全混乱的。它们都必须对齐(它们都必须是UTF-8(。请注意,所有文件本质上都是字节而不是字符。

  1. 代码编辑器
  2. 编译器
  3. "记录器客户端"/记录器输出系统
  4. 用于查看日志文件的工具

代码编辑器

您在源代码中编写了明确的非ascii字符。java源文件是字节,所以当你键入一个cyrillic字符时,它会在你的屏幕上显示为java源文件中的一个cyrillic字符,但当你点击file/save时会发生什么?你需要检查一下你的编辑器。打开编辑器,打开一个包含西里尔字符的文件,然后检查编码。在eclipse中,您可以在文件打开时单击"文件"菜单并点击"属性"选项。编码列在"资源"面板底部的"文本文件编码"部分。

编译器

Javac需要读取该文件。粘贴到渐变文件中的选项(options.encoding = 'UTF-8'(可以处理此问题。

查看

正如我所说,所有文件都是字节,所以当您打开任何文本文件时,您必须选择一个编码!许多智能文本编辑器会胡乱猜测,但有些只是假设某个编码。检查您的编辑器-通常可以选择文件的编码方式。文本文件本身不包含所使用的编码方式,除非在极少数情况下(通常是BOM,可以以所有UTF风格进行编码,但这是UTF特有的,通常不会添加(您的代码完全有可能没有任何问题,您只是用一个文本编辑器来查看它,而没有被告知将其读取为UTF-8

黑匣子

如果以上都不是,哎哟,那么这就变得更加困难了:日志在JVM内以字符串的形式发送(幸运的是,这意味着编码不是一件事,也不会发生任何损坏(,直到它们到达所谓的"客户端"或"日志后端",然后后者对它们进行任何处理:日志系统是抽象概念。处理程序有意地只是"到此为止,这一级别的日志消息,用它做你想做的事"。如果你想在电视上用闪光灯显示它们,那么可以为它写一个日志客户端。

您的日志客户端最终将日志消息写入一个文件,因此,它将字符串转换为字节,因此,正在应用编码。

您找到的另一个答案表明zalando的日志库使用servlet运行程序返回的编码,该答案解释了如何确保这是UTF-8。我想是你干的。

那么我该如何解决这个问题呢

完成以上所有4个步骤:

  • 确保编辑器处于UTF-8模式
  • 确保粘贴在问题中的渐变块正在使用中
  • 确保实现了其他答案的设置,以确保servlet运行程序设置为UTF-8
  • 请确保用于查看日志文件的内容已配置为使用UTF-8

如果您已经完成了所有这些,那么问题应该会消失。

最新更新