2

我在 OTP 22 中有一个 Erlang 项目,它使用内置的记录器模块进行记录(在 OTP 21 中添加)。

我的项目使用依赖项“amqp_client”(https://github.com/rabbitmq/rabbitmq-erlang-client)。

此依赖项使用lager库进行日志记录,因此lager也是我项目中的依赖项之一。

从我将lager添加到我的项目的那一刻起,通过logger完成的日志不再工作(我想这是因为lager正在覆盖logger也使用的 VM 的一些日志处理程序,或者类似的东西?)

有人有想法吗?

4

2 回答 2

2

(这应该是对evnu提供的答案的评论,但我还没有评论所需的代表)

啤酒中,您可以看到它如何删除默认的记录器处理程序。如果您离开error_logger_redirect,您有 2 个选择:

  1. 一切都依赖啤酒(为整个项目配置啤酒)
  2. 添加您自己的记录器处理程序(您可以在 sys.config 中完成,这是我为我的项目所做的)

2 未经测试的 sys.config 示例:

[
    {kernel, [
        {logger, [
            {handler, my_default, logger_std_h, #{
                level => debug,
                config => #{
                    sync_mode_qlen => 200,
                    overload_kill_enable => true
                },
                formatter => {logger_formatter, #{template => [time," ",pid," ",level,": ",msg,"\n"]}}
            }}
        ]}
    ]}
].
于 2020-05-20T11:04:46.313 回答
1

编辑:我误读了这个问题,它是关于 Erlang,而不是 Elixir。


请参阅amqp 的故障排除部分

Lager 与 Elixir 记录器的冲突

Rager 被 rabbit_common 使用,它还不是 Elixir 最好的朋友。你需要一个解决方法。

在 mix.exs 中,您必须先:lager加载:logger.

extra_applications: [:lager, :logger, :amqp]

这是静默 rabbit_common 日志记录的示例配置。

config :lager,
 error_logger_redirect: false,
 handlers: [level: :critical]

查看 Lager 和 RabbitMQ 文档以获取更多信息。

于 2020-05-19T12:00:52.393 回答