logger

module
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 9, 2026 License: MIT

README

pacra-logger

Structured logging library for Go microservices, built on zerolog. Designed for Saga-based orchestrator patterns in distributed systems.

Install

go get github.com/PACRAKora/logger/logger@v1.0.0

Quick start

import (
    "context"
    "os"
    logger "github.com/PACRAKora/logger/logger"
)

func main() {
    logger.InitConfig(logger.Config{
        Service:        os.Getenv("SERVICE_NAME"),
        Env:            os.Getenv("APP_ENV"),        // defaults to "development"
        ServiceVersion: os.Getenv("SERVICE_VERSION"),
        RedactKeys:     []string{"password", "token", "api_key", "authorization"},
        // Set EnableFile: true to write logs to LogDir/app.log (local dev / VM)
        // Seq is auto-enabled when SEQ_ENABLE=true, SEQ_URL, and SEQ_API_KEY are in the environment
    })

    ctx := logger.WithTraceID(context.Background(), "") // generate a fresh trace ID

    logger.Info(ctx, "main", "application started")

    logger.Warn(ctx, "processOrder", "/orders/processOrder", "retrying step",
        logger.WithEvent("SagaStepRetrying"),
        logger.WithComponent("Participant"),
        logger.WithTopic("orders"),
        logger.WithMessageID("msg-123"),
        logger.WithRetryCount(1),
        logger.WithDurationMs(245),
        logger.WithMetadata(map[string]any{"order_id": "order-2024-001"}),
    )

    logger.Error(ctx, "processOrder", "/orders/processOrder", "payment failed",
        logger.WithEvent("SagaStepFailed"),
        logger.WithComponent("Orchestrator"),
        logger.WithException(err),
    )
}

Features

  • Multi-output — stderr (pretty or JSON), optional file (app.log), optional Seq
  • Redaction — sensitive keys (e.g. password, token) masked in metadata before any write
  • Saga fieldscomponent, event, topic, message_id, retry_count, duration_ms
  • Trace propagationtrace_id auto-generated or injected; forward via X-Trace-Id header
  • Custom critical level — above Fatal (level 99) for highest-severity alerts
  • OpenTelemetry — build with -tags=otel to extract trace_id/span_id from an active OTel span
  • Cloud-native defaults — file logging off by default; logs to stderr for container log collectors

Configuration via environment variables

Variable Effect
LOG_DIR Override log file directory (used when EnableFile: true)
SEQ_ENABLE=true Enable Seq output
SEQ_URL Seq server URL
SEQ_API_KEY Seq API key
// Minimal production config — everything else comes from env vars
logger.InitConfig(logger.Config{
    Service: os.Getenv("SERVICE_NAME"),
})

Build & test

go build ./...
go test ./...
go test -tags=otel ./...
cd example/app && go run .

Docs

License

MIT © 2026 PACRA / PACRAKora

Directories

Path Synopsis
example
app command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL