如何解决 Lager 和 OTP 的 Logger 在 Erlang 中的碰撞?



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

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

这个依赖项使用拉格库进行日志记录,所以拉格也是我项目中的依赖关系之一。

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

有人有想法吗?

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

在 lager 中,您可以看到它如何删除默认的记录器处理程序。 如果您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"]}}
}}
]}
]}
].

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


请参阅 amqp 的故障排除部分:

拉格与长生不老药记录器冲突

rabbit_common使用拉格啤酒,它还不是Elixir最好的朋友。 您需要一个解决方法。

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

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

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

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

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

最新更新