如何解决Erlang中Lager与OTP Logger之间的冲突?

时间:2020-05-19 10:40:00

标签: logging erlang lager

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

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

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

从我将 lager 添加到项目的那一刻起,通过 logger 完成的日志就不再起作用了(我猜这是因为 lager < / strong>覆盖了 logger 也使用的VM的某些日志记录处理程序,或类似的东西?)

有人有主意吗?

2 个答案:

答案 0 :(得分:2)

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

lager中,您可以看到它如何删除默认的记录器处理程序。 如果您将error_logger_redirect留在以下位置,则有2个选择:

  1. 一切都依靠啤酒(为整个项目配置啤酒)
  2. 添加您自己的记录程序处理程序(您可以在sys.config中执行此操作,这是我为项目执行的操作)

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

[
    {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"]}}
            }}
        ]}
    ]}
].

答案 1 :(得分:0)

编辑:我误解了问题,这是关于Erlang而不是Elixir的问题。


请参见the troubleshooting section of amqp

与Elixir记录器的较大冲突

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文档。