View Source LoggerTelegramBackend
A logger backend for Telegram.
Installation
Add :logger_telegram_backend to your list of dependencies in mix.exs:
def deps do
[
{:logger_telegram_backend, "~> 3.0"},
{:logger_backends, "~> 1.0"},
{:hackney, "~> 1.18"},
]
endIn your Application.start/2 callback, add the LoggerTelegramBackend backend:
@impl true
def start(_type, _args) do
LoggerBackends.add(LoggerTelegramBackend)
# ...
endConfiguration
First of all you need to create a Telegram bot. Follow the instructions here to create one and get the token for the bot. Since bots are not allowed to contact users, you need to send a message first. Afterwards, retrieve your chat_id with $ curl -X GET https://api.telegram.org/botYOUR_TOKEN/getUpdates.
Then configure the telegram chat_id and bot token:
config :logger, LoggerTelegramBackend,
chat_id: "$chatId",
token: "$botToken"Options
The following options are available:
:level- the level to be logged by this backend (either:debug,:info,:warningor:error).Note that messages are filtered by the general
:levelconfiguration for the:loggerapplication first.Default:
nil(all levels are logged):metadata- the metadata to be included in the telegram message. Setting:metadatato:allgets all metadata.Default:
[:line, :function, :module, :application, :file].:metadata_filter- the metadata which is required in order for a message to be logged.Default:
nil:client- If you need different functionality for the HTTP client, you can define your own module that implements theLoggerTelegramBackend.HTTPClientbehaviour and setclientto that moduleDefault:
LoggerTelegramBackend.HackneyClient:hackney_optsDefault:
[pool: :logger_telegram_backend_pool]:hackney_pool_max_connectionsDefault:
50:hackney_pool_timeoutDefault:
5000
Examples
Finch client
Add Finch instead of
:hackneyto your list of dependencies:{:finch, "~> 0.16"}Add a module that implements the
LoggerTelegramBackend.HTTPClientbehaviour:defmodule MyFinchClient do @behaviour LoggerTelegramBackend.HTTPClient @finch_pool_name MyApp.Finch @impl true def child_spec do Finch.child_spec(name: @finch_pool_name) end @impl true def request(method, url, headers, body) do req = Finch.build(method, url, headers, body) case Finch.request(req, @finch_pool_name) do {:ok, %Finch.Response{status: status, headers: headers, body: body}} -> {:ok, status, headers, body} {:error, reason} -> {:error, reason} end end endPass your client module to the
:clientoption:config :logger, LoggerTelegramBackend, client: MyFinchClient, # ...
Metadata filter
config :logger, LoggerTelegramBackend,
chat_id: "$chatId",
token: "$botToken",
level: :info,
metadata: :all
metadata_filter: [application: :ui]SOCKS5 proxy
config :logger, LoggerTelegramBackend,
chat_id: "$chatId",
token: "$botToken",
hackney_opts: [
ssl: [verify: :verify_none],
hackney: [insecure: true],
proxy: {:socks5, ~c"127.0.0.1", 9050}
]See the hackney docs for further information.