end 626e1bb5ac fix: lifecycle-safe logger teardown without global state
Store file handle per module, swap lifecycle logger before closing file,
return teardown errors, remove duplicate Module() func.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 18:01:08 -07:00
2026-01-27 15:08:14 -08:00

applog

Opinionated slog wiring for go-toolkit app lifecycles.

Install

go get gitea.auvem.com/go-toolkit/applog

Usage

lifecycle := app.NewLifecycle(applog.AppLogOpts{
    ConsoleOutput: os.Stderr,
    ConsoleLevel:  slog.LevelInfo,
    FileOutput:    "/var/log/myapp.log",
    FileLevel:     slog.LevelInfo,
}.Module())

Outputs

Sink Format Default level
Console (ConsoleOutput) tint (human-readable) Info
File (FileOutput) JSON lines Info

Teardown

On teardown the log file is closed and the lifecycle logger falls back to console-only (or discard). Logging via lifecycle.Logger() after teardown does not write to a closed file.

Migration from pre-V1 API

Before After
applog.Module(opts) opts.Module()
LogOutput ConsoleOutput
LogFile FileOutput
Verbose bool ConsoleLevel: slog.LevelDebug
S
Description
applog is a opinionated logger configuration.
Readme BSD-3-Clause 39 KiB
Languages
Go 100%