// Package sneklog provides a small structured logger that can write the same // record to text and JSON outputs. // // A Logger can fan out records to stdout, files, or any external io.Writer. // Text writers can include timestamps and a compact traceback frame. JSON // writers always emit a structured traceback slice. // // CreateLogger uses the following defaults: // - prefix: "LOG" // - level: FATAL, which enables info, warn, error, and fatal records // - pretty JSON: disabled // - text formatter: DefaultTextFormatter // - JSON formatter: DefaultJsonFormatter // // Call Level(DEBUG) to enable all records, including debug messages. // AddReplacer can be used to mask or normalize message text before records are // passed to writers. Call SetFormatter on a writer to customize timestamps, // traceback fields, colors, and message layout. // // The package also provides helper constructors for common severities such as // NewInfoLogLevel and NewErrorLogLevel, plus predefined HTTP method-specific // levels such as HTTPGetLevel and HTTPPostLevel. Use LogLevelForMethod to map // an HTTP method to one of those predefined levels. // // Basic usage: // // logger := sneklog.CreateLogger(). // Prefix("API"). // Level(sneklog.DEBUG). // AddReplacer("secret-token", "") // // text := logger.CreateTextStdoutWriter() // jsonFile, err := logger.CreateJsonFileWriter("logs/app.json") // if err != nil { // panic(err) // } // // logger.AddWriters(text, jsonFile) // logger.Infoln("service started", "secret-token") // // if err := logger.Close(); err != nil { // panic(err) // } // // Writers created with CreateTextFileWriter or CreateJsonFileWriter are owned by // the logger and are closed by Logger.Close. Writers created from existing // io.Writer values through CreateTextWriter or CreateJsonWriter remain owned by // the caller and are not closed by the logger. // // LogLevel values can be compared with SameLevel when only severity matters or // with Equal when the full level configuration must match. package sneklog