gpt4 book ai didi

logging - 您可以为 Phoenix 的不同路线设置不同的日志级别吗?

转载 作者:行者123 更新时间:2023-12-02 00:21:18 25 4
gpt4 key购买 nike

我有一个 /ping 路由,在生产中被负载均衡器和 kubernetes 运行状况检查多次调用。我想仅针对该路由将 Plug.Logger 的日志级别设置为 :debug

defmodule Web.Endpoint do
...
forward "/ping", Web.HealthCheck
...
end

defmodule Web.HealthCheck do
use Plug.Router

plug :match
plug :dispatch

get "/" do
send_resp(conn, 200, "ok")
end
end

我还没有找到修改或删除现有插头的方法。我尝试将 plug Plug.Logger, log: :debug 添加到 Web.HealthCheck,但随后我只在不同级别记录了两次路由

[info] GET /ping
[debug] GET /ping

我找到了一种完全禁用特定路由日志记录的方法,方法是从 endpoint.ex 中删除 plug Plug.Logger 并根据需要手动添加回来 https://elixirforum.com/t/disable-logging-on-specific-route/622 ,但是我必须小心记住确保为我添加的每个新路由启用日志记录,实际上我更愿意将 /ping 路由设置为调试,以便它可以记录根据需要在开发中使用,但在生产中不会如此垃圾。

最佳答案

在 Phoenix 的最新版本中,似乎特定日志现在由 Phoenix.Logger 生成,以响应 Plug.Telemetry 发出的遥测事件。抑制特定路由的方式与 Plug.Logger 非常相似。创建一个根本不包含遥测的单独端点/管道,或者提供插件的自定义实现来更改某些路径的日志级别:

defmodule MyWeb.Plugs.Telemetry do
@behaviour Plug

@impl true
def init(opts), do: Plug.Telemetry.init(opts)

@impl true
def call(%{path_info: ["ping"]} = conn, {start_event, stop_event, opts}) do
Plug.Telemetry.call(conn, {start_event, stop_event, Keyword.put(opts, :log, :debug)})
end
def call(conn, args), do: Plug.Telemetry.call(conn, args)
end

然后替换

  plug Plug.Telemetry, event_prefix: [:phoenix, :endpoint]

  plug MyWeb.Plugs.Telemetry, event_prefix: [:phoenix, :endpoint]

在您的endpoint.ex中。

关于logging - 您可以为 Phoenix 的不同路线设置不同的日志级别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48449492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com