过滤 Genserver 终止日志 (translator_inspect_opts?)

Filter Genserver Termination Logs (translator_inspect_opts?)

过滤 GenServer 终止事件的日志记录输出的最佳方法是什么?似乎 Elixir.Logger 允许 :translator_inspect_opts 在这里提供一些配置,但我不清楚如何处理以下情况:

Genserver 终止时的默认日志记录输出包括收到的最后一条消息和状态,如下所示:

10:06:00.165 [error] GenServer #PID<0.378.0> terminating
** (FunctionClauseError) no function clause matching in 
Module.handle_info/2 path_to_file.ex:30: 
...
Last message: {:DOWN, #Reference<0.1522575658.3956015107.616>, 
:process, #PID<0.295.0>, {:function_clause, [{Module.function, 
:handle_info, [{#Reference<0.1522575658.3968335873.44738>, {:ok, 
#Port<0.84>, #PID<0.363.0>}}]}
State: {%{#Reference<0.1522575658.3956015107.615> => [STATE],   
...

在某些情况下,我想从错误日志中完全省略消息和状态,在某些情况下,我想过滤掉每个参数中包含的一些参数。我该如何处理这种情况?

AFAICT,通过 Logger 配置是不可能的,它通常看起来像 XY problem。您愿意省略某些 {:DOWN, _, _, _, _}, state 事件的日志,这表明您实际上希望以不同的方式对待它们。 Just do it — ErlangVM 非常友好。

在您的 GenServer 中实施以下 GenServer.handle_info/2

@impl
def handle_info({:DOWN, ref, what, pid, reason}, state) do
  ...
end

可能有不同的条款,不同的情况处理不同。