Erlang OTP 21 Как отключить вывод на консоль регистратора

#erlang #erlang-otp

#erlang #erlang-otp

Вопрос:

Согласно документации erlang, возможно ли настроить регистратор только для файлов:

из документации Erlang:

Измените обработчик по умолчанию для печати в файл вместо standard_io:

 [{kernel,
[{logger,
  [{handler, default, logger_std_h,  % {handler, HandlerId, Module,Config}
    #{config => #{file => "log/erlang.log"}}}
]}]}].
  

Мой конфигурационный файл выглядит так:

  [{kernel,[
  {logger_level, error},
  {logger,
    [{handler, default, logger_std_h,
      #{config => #{file => "log/erlang.log"}}}
    ]
   }
  ]}].
  

ввод-вывод точно такой, как в документации.
с уровнем журнала, установленным на ошибку

Когда я запускаю приложение с помощью оболочки reabar3, следующее выводится в консоль:

 ===> The rebar3 shell is a development tool; to deploy applications in production, consider using releases (http://www.rebar3.org/docs/releases)
2019-04-10T15:14:33.363287 02:00 info: application: syntax_tools, started_at: 'node@x201'
2019-04-10T15:14:33.371897 02:00 info: application: compiler, started_at: 'node@x201'
2019-04-10T15:14:33.379962 02:00 info: supervisor: {local,gr_sup}, started: [{pid,<0.1181.0>},{id,gr_counter_sup},{mfargs,{gr_counter_sup,start_link,[]}},{restart_type,permanent},{shutdown,5000},{child_type,supervisor}]
2019-04-10T15:14:33.382379 02:00 info: supervisor: {local,gr_sup}, started: [{pid,<0.1182.0>},{id,gr_param_sup},{mfargs,{gr_param_sup,start_link,[]}},{restart_type,permanent},{shutdown,5000},{child_type,supervisor}]
  

Таким образом, сообщения о ходе выполнения OTP не перенаправляются в файл, но все равно выводятся на консоль, а файл erlang.log пуст.

Как отключить вывод на консоль и перенаправить все сообщения в файл?

PS Версия Erlang:

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

Ответ №1:

После непродолжительной борьбы я обнаружил проблему:

  • В случае неправильного параметра Logger просто не создает файл.
  • Похоже, документация неполная

    [{ядро, [{регистратор, [{обработчик, по умолчанию, logger_std_h, % {обработчик, идентификатор обработчика, модуль, конфигурация} #{config => #{file => «log/erlang.log»}}} ]}]}].

    {config => #{file => «log/erlang.log»}}

должно быть изменено на:

#{config => #{ type => {file => «log/erlang.log»}}}}

  [{kernel,
 [{logger,
  [{handler, default, logger_std_h,  % {handler, HandlerId, Module,Config}
   #{config => #{ type => {file => "log/erlang.log"}}}}
]}]}].
  

Здесь: полный пример файла конфигурации регистратора

Комментарии:

1. Если это действительно ошибка в документации, об этом можно сообщить bugs.erlang.org

2. Большое спасибо. Просто сообщите об этом там

3. Это не ошибка в документации. Вместо этого формат конфигурации изменился между OTP 21 и OTP 22. Если вы посмотрите документацию OTP 21, она содержит формат, который, по вашим словам, подходит для вас: erlang.org/documentation/doc-10.0/lib/kernel-6.0/doc/html /…

Ответ №2:

вот так:

 {logger, [
{handler,default,undefined}
]}