LoggerTelegramBackend

Build StatusDocsHex.pm

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"},
]
end

In your c:Application.start/2 callback, add the LoggerTelegramBackend backend:

@impl true
def start(_type, _args) do
LoggerBackends.add(LoggerTelegramBackend)
# ...
end

Configuration

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:

Examples

Finch client

  1. Add Finch instead of :hackney to your list of dependencies:

    {:finch, "~> 0.16"}
  2. Add a module that implements the LoggerTelegramBackend.HTTPClient behaviour:

    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
    end
  3. Pass your client module to the :client option:

    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.