首页 > 解决方案 > 带有记录器的 Erlang 日志中的 Unicode

问题描述

我正在尝试将一些 Unicode 输出到日志中:

logger:debug("~ts", [<<"Тест"/utf8>>]).

并在日志中获取以下内容:

DEFAULT FORMATTER CRASHEDDEFAULT FORMATTER CRASHEDDEFAULT FORMATTER....

但是,如果我改用~s格式字符串,它不会崩溃,但会输出非 unicode 版本:

debug: ТеÑ<U+0081>Ñ<U+0082>

有任何想法吗?似乎无法找到我做错了什么。

环境

Erlang/OTP 21 [erts-10.0.5] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

记录器配置来自sys.config

{kernel, [
  {logger, [
    {handler, default, logger_std_h,
      #{level => debug,
        formatter => {logger_formatter, #{single_line => true}},
        config => #{type => {file, "log/main.log"}}}},
    {handler, errors, logger_std_h,
      #{level => error,
        formatter => {logger_formatter, #{single_line => false}},
        config => #{type => {file, "log/errors.log"}}}}
  ]},
  {logger_level, debug}
]}

标签: unicodeerlang

解决方案


我花了一整夜在 Erlang Slack 频道上与某人进行跟踪,我们发现它是单行格式化程序,特别是有一个错误导致整个事情崩溃。它现在已在 21.1 中修复。升级后问题消失了。


推荐阅读