Glasgow Hex VersionHex Docs

An Elixir logger handler for sending logs to Grafana Loki.

Installation

The package can be installed by adding glasgow to your list of dependencies in mix.exs:

def deps do
[
{:glasgow, "~> 0.1.3"}
]
end

Configuration

Example of a basic configuration for config.exs or runtime.exs:

config :my_app, :logger, [
{:handler, :glasgow, Glasgow,
%{
config: %{
level: :info,
url: System.get_env("URL", "http://localhost:3100"),
labels: [
{"service_name", "service_1"},
{"env", "env_1"}
]
},
formatter: Logger.Formatter.new()
}}
]

Once defined, the handler can be explicitly attached with add_handlers/1.

For example, in your Application.start/2:

@impl true
def start(_type, _args) do
...
:ok = Logger.add_handlers(:my_app)
...
Supervisor.start_link(children, opts)
end

Advanced Configuration

Elixir Logger handlers can be configured with filters and metadata to provide control and context.

config :my_app, :logger, [
{:handler, :glasgow, Glasgow,
%{
config: %{
level: :info,
url: System.get_env("URL", "http://localhost:3100"),
labels: [
{"service_name", "service_1"},
{"env", "env_1"}
],
metadata: [:my_metadata_key]
},
formatter: Logger.Formatter.new(),
filters: [filter_name: {&MyModule.filter/2, []}]
}}
]

Usage

Once the handler has been configured and attached, logs can be sent to Loki using the standard Logger module.

Logger.info("Hello, world!")

The library also provides a send/4 function for sending messages directly and bypass the Logger.

Glasgow.send("http://localhost:3100", [{"label1","value1"}], "message", DateTime.utc_now())

Requirements

The library requires the Rust toolchain because it depends on Snappyrex for Snappy compression.