檢視原始碼 Phoenix.Logger (Phoenix v1.7.14)
量測工具用以處理各種量測事件的紀錄。
量測工具
Phoenix 使用 :telemetry
函式庫進行量測。Phoenix 會發佈以下事件,並附有下列量測和元資料
[:phoenix, :endpoint, :init]
-Phoenix.Endpoint
在 Endpoint 監督樹成功啟動後,會派送此事件- 量測:
%{system_time: system_time}
- 元資料:
%{pid: pid(), config: Keyword.t(), module: module(), otp_app: atom()}
- 停用紀錄:此事件不會被記錄
- 量測:
[:phoenix, :endpoint, :start]
- 通常在重新載入程式碼後,Endpoint 中的Plug.Telemetry
會派送此事件- 量測:
%{system_time: system_time}
- 元資料:
%{conn: Plug.Conn.t, options: Keyword.t}
選項:
%{log: Logger.level | false}
停用紀錄:在您的 Endpoint 中使用
plug Plug.Telemetry, ..., log: Logger.level | false
- 動態設定記錄等級:
plug Plug.Telemetry, ..., log: {Mod, Fun, Args}
- 量測:
[:phoenix, :endpoint, :stop]
- 每當送出回應時,Endpoint 中的Plug.Telemetry
會派送此事件- 量測:
%{duration: native_time}
- 元資料:
%{conn: Plug.Conn.t, options: Keyword.t}
選項:
%{log: Logger.level | false}
停用紀錄:在您的 Endpoint 中使用
plug Plug.Telemetry, ..., log: Logger.level | false
- 動態設定記錄等級:
plug Plug.Telemetry, ..., log: {Mod, Fun, Args}
- 量測:
[:phoenix, :router_dispatch, :start]
- 在派送至已匹配的路由之前,Phoenix.Router
會派送此事件- 量測:
%{system_time: System.system_time}
元資料:
%{conn: Plug.Conn.t, route: binary, plug: module, plug_opts: term, path_params: map, pipe_through: [atom], log: Logger.level | false}
- 停用紀錄:將
log: false
傳遞至路由巨集,例如:get("/page", PageController, :index, log: false)
- 動態設定記錄等級:
get("/page", PageController, :index, log: {Mod, Fun, Args})
- 量測:
[:phoenix, :router_dispatch, :exception]
- 在派送路由時發生例外的事件後,Phoenix.Router
會派送此事件- 量測:
%{duration: native_time}
元資料:
%{conn: Plug.Conn.t, kind: :throw | :error | :exit, reason: term(), stacktrace: Exception.stacktrace()}
- 停用紀錄:此事件不會被記錄
- 量測:
[:phoenix, :router_dispatch, :stop]
- 由Phoenix.Router
在成功指派匹配的路線後指派- 量測:
%{duration: native_time}
元資料:
%{conn: Plug.Conn.t, route: binary, plug: module, plug_opts: term, path_params: map, pipe_through: [atom], log: Logger.level | false}
- 停用紀錄:此事件不會被記錄
- 量測:
[:phoenix, :error_rendered]
- 在呈現錯誤檢視的尾端指派- 量測:
%{duration: native_time}
- 中繼資料:
%{conn: Plug.Conn.t, status: Plug.Conn.status, kind: Exception.kind, reason: term, stacktrace: Exception.stacktrace}
- 停用記錄:在終端點設定中設定
render_errors: [log: false]
- 量測:
[:phoenix, :socket_connected]
-Phoenix.Socket
指派,即通訊端連線的尾端- 量測:
%{duration: native_time}
中繼資料:
%{endpoint: atom, transport: atom, params: term, connect_info: map, vsn: binary, user_socket: atom, result: :ok | :error, serializer: atom, log: Logger.level | false}
- 停用記錄:在終端點中設定
use Phoenix.Socket, log: false
或socket "/foo", MySocket, websocket: [log: false]
- 量測:
[:phoenix, :channel_joined]
- 即頻道加入的尾端指派- 量測:
%{duration: native_time}
中繼資料:
%{result: :ok | :error, params: term, socket: Phoenix.Socket.t}
- 停用記錄:此事件無法停用
- 量測:
[:phoenix, :channel_handled_in]
- 即頻道處理器的尾端指派- 量測:
%{duration: native_time}
- 中繼資料:
%{event: binary, params: term, socket: Phoenix.Socket.t}
- 停用記錄:此事件無法停用
- 量測:
若要查看 Phoenix LiveDashboard 如何使用這些事件建立指標的範例,請至 https://hexdocs.dev.org.tw/phoenix_live_dashboard/metrics.html。
參數過濾
在記錄參數時,Phoenix 能過濾出敏感的參數,例如:密碼和通行碼。可在 :filter_parameters
選項中新增要過濾的參數
config :phoenix, :filter_parameters, ["password", "secret"]
透過以上的設定,Phoenix 會過濾掉任何包含 password
或 secret
的參數。會根據大小寫進行比對。
Phoenix 的預設值為 ["password"]
。
Phoenix 可過濾所有參數,並選擇保留的參數。可透過以下方式設定
config :phoenix, :filter_parameters, {:keep, ["id", "order"]}
透過以上的設定,Phoenix 會過濾掉所有參數,但會保留完全符合 id
或 order
的參數。若任一保留的參數符合,所有巢狀在該參數底下的參數也會保留。
動態記錄層級
在部分情況下,您可能希望能根據每項要求動態設定記錄層級。為執行此動作,請將 :log
選項設定為元組 {Mod, Fun, Args}
。請求的 Plug.Conn.t()
會新增於所提供的參數清單之前。
呼叫時,你的函數必須傳回一個 Logger.level()
或 false
來為請求停用記錄。
例如,在你的端點中,你可能會執行類似下列的動作
# lib/my_app_web/endpoint.ex
plug Plug.Telemetry,
event_prefix: [:phoenix, :endpoint],
log: {__MODULE__, :log_level, []}
# Disables logging for routes like /status/*
def log_level(%{path_info: ["status" | _]}), do: false
def log_level(_), do: :info
停用
在你使用自訂記錄系統時,不總是希望預設啟用 Phoenix.Logger
。你總是可以用下列方式在一般情況下停用它
config :phoenix, :logger, false