erlang - 如何在没有崩溃报告的情况下优雅地终止 gen_server

标签 erlang erlang-otp lager

在我的 gen_server 中,我将这样终止它:

handle_info({'EXIT', _From, _Reason}, State) ->
    {stop, partner_fled, State};

但是 logger 还是打印出了错误

14:56:43.349 [error] gen_server <0.3290.0> terminated with reason: partner_fled
14:56:43.349 [error] CRASH REPORT Process <0.3290.0> with 0 neighbours exited with reason: partner_fled in gen_server:terminate/7 line 812

代码按预期工作,但我不希望记录器打印它作为正常终止。

顺便说一下,我正在使用啤酒,但我认为删除它只会改变日志记录的格式。

最佳答案

来自 the manual :

Notice that for any other reason than normal, shutdown, or {shutdown,Term}, the gen_server process is assumed to terminate because of an error and an error report is issued using error_logger:format/2.

因此,如果您不想打印任何错误报告,您可以将原因更改为normalshutdown,或者如果您确实想返回一个也可以自定义 Term,{shutdown, Term}

handle_info({'EXIT', _From, _Reason}, State) ->
    {stop, {shutdown, partner_fled}, State};

关于erlang - 如何在没有崩溃报告的情况下优雅地终止 gen_server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44226189/

相关文章:

Erlang 演示应用程序?

binary - 进程间共享大二进制数据

haskell - Elixir 和 Haskell 互操作性

erlang - 每个应用程序的日志级别更大

logging - 如何解决Erlang中Lager和OTP的Logger之间的冲突?

Erlang简单的服务器问题

syntax - erlang REPL定义范围错误: cannot execute function

erlang - Erlang/OTP持续部署简介

erlang - 如果 gen_fsm 没有收到消息,则允许它超时

erlang - 如何为 rebar 依赖项设置应用程序变量?