logx

Áttekintés

Önálló slog-kompozíció (konzolformátum, szintszűrés, fanout), plusz egy PHP/Monolog-stílusú konzol-formázó.

A logx önálló Go modul (github.com/gp-system/logx, +logx/monolog): egy kis eszközkészlet a default log/slog logger komponálásához. Három kombinátor (ConsoleHandler, LevelFilter, Fanout) ad konzolformátum-váltót, minimum-szint kaput és egy Monolog-stílusú, több-handleres stacket, mind sima slog.Handler értékként. Fölötte a logx/monolog egy önálló formázó, ami [dátum] channel.SZINT: üzenet {context} sorokat rendel, PHP-stílusban, egy errs hibából kinyert, teljes útvonalú stack trace-szel.

Korábban a telemetry logx nevű alcsomagjaként élt; azóta önálló modulba költözött, mert egy konzol-logger komponálásának semmi köze az OpenTelemetryhez vagy a Sentry-bekötéshez, és egy programnak, ami csak olvasható konzollogot akar, nem kéne emiatt az OTel SDK-t vagy a sentry-go-t behúznia. A telemetry.Setup ugyanúgy használja a logx-et, mint eddig, csak modul-függőségként, nem alcsomagként: a futásidejű viselkedésen semmi nem változott, csak azon, melyik modulban él a kód.

Az egyetlen függősége az errs, és azt is csak a logx/monolog használja: a formázó az errs.CodeOf-ot olvassa és az errs.FullFrames/errs.Frame-en át járja be egy becsomagolt hiba stackjét. Maga a logx csomag (ConsoleHandler, LevelFilter, Fanout, Config) a standard libraryn túl semmit nem importál.

Telepítés

go get github.com/gp-system/logx@main # még nincs taggelt release
Import-útMit ad hozzá
github.com/gp-system/logxa slog-kompozíciót: ConsoleHandler, LevelFilter, Fanout, Config
github.com/gp-system/logx/monologa PHP/Monolog-stílusú konzol-formázót, önmagában is sima slog.Handler-ként használható

Konfiguráció

A logx.Config nem hordoz saját env-prefixet: a változók arra vannak szánva, hogy prefix nélkül, a legfelső szinten ágyazódjanak be, bármi is komponálja őket (a frameworkben a telemetry.Config Log mezőjeként).

VáltozóDefaultJelentés
LOG_LEVELINFOa logger minimális szintje (a fanout minden handlerére érvényes)
LOG_STDOUTfalseprod módban is írjon konzolra (JSON); hagyd kikapcsolva, ha a collector a konténer-kimenetet szedi, különben duplán ingesztálsz
LOG_FORMATüres (auto)a konzol-formátum: üresen szöveg dev módban / JSON prodban; monolog → Monolog-stílusú sorok, módtól függetlenül

Ismeretlen LOG_FORMAT értékre a Config.Validate() hibával áll le, nem csendben esik vissza.

A kompozíció: Fanout és LevelFilter

Három kis slog.Handler-kombinátor a teljes csomag:

func ConsoleHandler(w io.Writer, cfg Config, dev bool, channel string) slog.Handler
func Fanout(handlers ...slog.Handler) slog.Handler          // több handler, egy-egy rekordklón mindnek
func LevelFilter(min slog.Level, next slog.Handler) slog.Handler // minimum-szint kapu

A LevelFilter azért létezik, mert nem minden leaf-handler szűr magától (egy OTLP bridge például mindent továbbít, amit kap): tedd legkívülre, és minden mögötte lévő handler csak a minimum szint fölötti rekordokat látja. A Fanout minden handlernek a rekord saját klónját adja, és az Enabled-et handlerenkénti gate-ként tiszteli; egyetlen handler esetén allokáció nélkül, önmagaként tér vissza.

Használat

Sima Go program, framework és telemetry nélkül:

main.go
package main

import (
    "log/slog"
    "os"

    "github.com/gp-system/logx"
)

func main() {
    cfg := logx.Config{Level: slog.LevelInfo, Format: "monolog"}

    slog.SetDefault(slog.New(
        logx.LevelFilter(cfg.Level, logx.Fanout(
            logx.ConsoleHandler(os.Stdout, cfg, true, "myapp"),
            // ide kerülhet még handler: fájl-handler, saját sink, ...
        )),
    ))

    slog.Info("service starting", "addr", ":3000")
}

A frameworkön belül a telemetry.Setup ugyanígy építi a default loggert, csak két plusz handlerrel a fanoutban: az OTel log-bridge-dzsel és a Sentry capture handlerrel. Lásd a Telemetry: Logolás oldalt ehhez a kompozícióhoz.

Kapcsolódó oldalak

  • logx: Monolog-formázó: a [dátum] channel.SZINT: üzenet formátum, stack trace-ek az errs-ből, és egy Laravel/Symfony-fogalommegfeleltetés.
  • Telemetry: Áttekintés: hogyan fanoutolja a telemetry.Setup a logx konzol-handlerét az OTel-bridge és a Sentry-handler mellé.
  • errs: Áttekintés: a hibatípus, amiből a logx/monolog a stack trace-t rendereli.
Copyright © 2026