logger-telegram-backend
logger-telegram-backend copied to clipboard
A logger backend for Telegram
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, "~> 2.0"},
{:hackney, "~> 1.17"}, # optional, but recommended adapter
]
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 add LoggerTelegramBackend to the :backends configuration, configure the telegram chat_id and bot token:
config :logger, backends: [LoggerTelegramBackend, :console]
config :logger, :telegram,
chat_id: "$chatId",
token: "$botToken"
The logger configuration is read at runtime from the application environment so that you can provide it via distillerys dynamic configuration with environment variables.
Options
The following options are available:
:level- the level to be logged by this backend (either:debug,:info,:warnor:error). Note that messages are filtered by the general:levelconfiguration for the:loggerapplication first. If not explicitly configured all levels are logged.:metadata- the metadata to be included in the telegram message. Defaults to[:line, :function, :module, :application, :file]. Setting:metadatato:allgets all metadata.:metadata_filter- the metadata which is required in order for a message to be logged. Example:metadata_filter: [application: :ui].:proxy- connect via an HTTP tunnel or a socks5 proxy. See the hackney docs for further information. (Only available with the default hackney adapter).:adapter- the Tesla adapter for the Telegram client (default:{Tesla.Adapter.Hackney, pool: :logger_telegram_backend})
Examples
With Metadata Filter
config :logger, :telegram,
chat_id: "$chatId",
token: "$botToken",
level: :info,
metadata: :all
metadata_filter: [application: :ui]
With Finch Adapter
config :logger, :telegram,
chat_id: "$chatId",
token: "$botToken",
adapter: {Tesla.Adapter.Finch, name: MyFinch}
Note: You'll need to add Finch instead of hackney to your list of dependencies:
{:finch, "~> 0.6"}
With Proxy
config :logger, :telegram,
chat_id: "$chatId",
token: "$botToken",
proxy: "socks5://127.0.0.1:9050"
Multiple logger handlers
Like the LoggerFileBackend multiple logger handlers may be configured, each with different :chat_ids, :levels etc. Each handler has to be configured as a separate logger backend:
config :logger,
backends: [
{LoggerTelegramBackend, :telegram_filter},
{LoggerTelegramBackend, :telegram_level},
:console
]
config :logger, :telegram_filter,
chat_id: "$chatId",
token: "$botToken",
metadata_filter: [application: :ui],
metadata: [:line, :function, :module, :pid]
config :logger, :telegram_level,
chat_id: "$chatId",
token: "$botToken",
level: :warn