glogg

A simple, structured JSON logging library for Gleam that works across Erlang and JavaScript targets.

Named after the traditional Scandinavian mulled wine that warms you up during cold winter nights, this logging library aims to bring the same cozy, warming comfort to your debugging sessions.

Package Version Hex Docs

Features

Quick Start

gleam add glogg
import glogg.{bool, info, int, string}

pub fn main() {
  glogg.configure_default_json_formatting()
  glogg.configure_default_minimum_level(glogg.Debug)

  glogg.new()
  |> info("this is fine", [
    bool("everything_burning", True),
    string("glogg_temperature", "still_hot"),
    int("production_issues", 42069)
  ])
}

Usage Examples

Structured Fields

info(logger, "processing payment", [
  string("payment_id", "pay_123"),
  float("amount", 29.99),
  int("user_id", 12345),
  bool("verified", True),
  duration_ms("processing_time", duration.millisecond(150)
])

Stacktrace

error(logger, "huge issue", [
  string("payment_id", "pay_123"),
  int("user_id", 12345),
  stacktrace()
])

Nested Fields

info(logger, "api request completed", [
  group("request", [
    string("method", "POST"),
    string("path", "/api/users"),
    int("status", 201)
  ]),
  group("response", [
    float("duration_ms", 45.2),
    int("bytes", 1024)
  ])
])

Logger Configuration

// Configures the BEAM logger to output JSON to stdout.
// This should be done once at the start of your application.
// It is a no-op on JavaScript targets.
glogg.configure_default_json_formatting()

// Set the minimum log level
// (Debug, Info, Notice, Warning, Error, Critical, Alert, Emergency)
glogg.configure_default_minimum_level(glogg.Info)

// Add default fields to all logs
let logger =
  glogg.new()
  |> with_default_fields([
    string("service", "web-api"),
    string("version", "1.2.3"),
  ])

// Add more default fields later
let logger = glogg.add_default_fields(logger, [
  string("environment", "production")
])
Search Document