我在OTP 22中有一个Erlang项目,该项目使用内置的 logger 模块进行日志记录(该模块已在OTP 21中添加)。
我的项目使用依赖项“ amqp_client”(https://github.com/rabbitmq/rabbitmq-erlang-client)。
此依赖项使用 lager 库进行记录,因此 lager 也是我项目中的依赖项之一。
从我将 lager 添加到项目的那一刻起,通过 logger 完成的日志就不再起作用了(我猜这是因为 lager < / strong>覆盖了 logger 也使用的VM的某些日志记录处理程序,或类似的东西?)
有人有主意吗?
答案 0 :(得分:2)
(这应该是对evnu提供的答案的评论,但我还没有评论的代表)
在lager中,您可以看到它如何删除默认的记录器处理程序。
如果您将error_logger_redirect
留在以下位置,则有2个选择:
未经测试的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文档。