Spec-Zone.ru › Phoenix

Phoenix.Logger

Исходный код

Инструмент для обработки журналирования различных событий инструментирования.

Инструментирование

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] — событие отправляется модулем Plug.Telemetry в Endpoint, обычно после перезагрузки кода

    • Измерение: %{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] — событие отправляется модулем Plug.Telemetry в Endpoint при отправке ответа

    • Измерение: %{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] в конфигурации Endpoint
  • [: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] в Endpoint
  • [:phoenix, :socket_drain] — событие отправляется модулем Phoenix.Socket при использовании параметра :drainer

    • Измерение: %{count: integer, total: integer, index: integer, rounds: integer}
    • Метаданные: %{endpoint: atom, socket: atom, intervasl: integer, log: Logger.level | false}

    • Отключение журналирования: use Phoenix.Socket, log: false в Endpoint или передайте параметр :log в параметре :drainer
  • [:phoenix, :channel_joined] — событие отправляется в конце присоединения к каналу

    • Измерение: %{duration: native_time}
    • Метаданные: %{result: :ok | :error, params: term, socket: Phoenix.Socket.t}

    • Отключение журналирования: это событие нельзя отключить
  • [:phoenix, :channel_handled_in] — событие отправляется в конце обработки handle_in канала

    • Измерение: %{duration: native_time}
    • Метаданные: %{event: binary, params: term, socket: Phoenix.Socket.t}
    • Отключение журналирования: это событие нельзя отключить

Пример использования этих событий в Phoenix LiveDashboard для создания метрик см. на странице https://phoenix-live-dashboard.hexdocs.pm/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, чтобы отключить журналирование для запроса.

Например, в Endpoint можно сделать следующее:

  # 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

Пакет Hex Предпросмотр Hex Скачать версию ePub

Создано с помощью ExDoc (v0.40.3) для языка программирования Elixir

© 2014 Chris McCord
Licensed under the MIT License.
https://phoenix.hexdocs.pm/Phoenix.Logger.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API