Documentation ¶
Overview ¶
Package tint implements a zero-dependency slog.Handler that writes tinted (colorized) logs. The output format is inspired by the zerolog.ConsoleWriter and slog.TextHandler.
The output format can be customized using Options, which is a drop-in replacement for slog.HandlerOptions.
Customize Attributes ¶
Options.ReplaceAttr can be used to alter or drop attributes. If set, it is called on each non-group attribute before it is logged. See slog.HandlerOptions for details.
w := os.Stderr logger := slog.New( tint.NewHandler(w, &tint.Options{ ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr { if a.Key == slog.TimeKey && len(groups) == 0 { return slog.Attr{} } return a }, }), )
Automatically Enable Colors ¶
Colors are enabled by default and can be disabled using the Options.NoColor attribute. To automatically enable colors based on the terminal capabilities, use e.g. the go-isatty package.
w := os.Stderr logger := slog.New( tint.NewHandler(w, &tint.Options{ NoColor: !isatty.IsTerminal(w.Fd()), }), )
Windows Support ¶
Color support on Windows can be added by using e.g. the go-colorable package.
w := os.Stderr logger := slog.New( tint.NewHandler(colorable.NewColorable(w), nil), )
Example ¶
package main import ( "errors" "log/slog" "os" "time" "github.com/matrix14159/tint" ) func main() { slog.SetDefault(slog.New(tint.NewHandler(os.Stderr, &tint.Options{ Level: slog.LevelDebug, TimeFormat: time.Kitchen, }))) type Cat struct { Name string Age int } slog.Info("hello", "info", "there is the message") slog.Info("hello", slog.Any("info", "there is the message")) slog.Info("duration", "gap", 10*time.Second) slog.Info("time", "now", time.Now()) slog.Info("log struct", "cat", Cat{Name: "tom", Age: 1}) slog.Info("Starting server", "addr", ":8080", "env", "production") slog.Debug("Connected to DB", "db", "myapp", "host", "localhost:5432") slog.Warn("Slow request", "method", "GET", "path", "/users", "duration", 497*time.Millisecond) slog.Error("DB connection lost", tint.Err(errors.New("connection reset")), "db", "myapp") }
Output:
Index ¶
- func Err(err error) slog.Attr
- func NewHandler(w io.Writer, opts *Options) slog.Handler
- type Options
- type WasmConsole
- func (p *WasmConsole) Assert(condition bool, a ...any)
- func (p *WasmConsole) Clear()
- func (p *WasmConsole) Count(label string)
- func (p *WasmConsole) CountReset(label string)
- func (p *WasmConsole) Debug(msg []byte)
- func (p *WasmConsole) Dir(obj any)
- func (p *WasmConsole) Dirxml(obj any)
- func (p *WasmConsole) Error(msg []byte)
- func (p *WasmConsole) Group(label string)
- func (p *WasmConsole) GroupCollapsed(label string)
- func (p *WasmConsole) Info(msg []byte)
- func (p *WasmConsole) Log(msg []byte)
- func (p *WasmConsole) Table(data any)
- func (p *WasmConsole) Time(label string)
- func (p *WasmConsole) TimeEnd(label string)
- func (p *WasmConsole) TimeLog(label string)
- func (p *WasmConsole) Trace(msg string, a ...any)
- func (p *WasmConsole) Warn(msg []byte)
- func (p *WasmConsole) Write(buf []byte) (n int, err error)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Err ¶
Err returns a tinted (colorized) slog.Attr that will be written in red color by the tint.Handler. When used with any other slog.Handler, it behaves as
slog.Any("err", err)
func NewHandler ¶
NewHandler creates a slog.Handler that writes tinted logs to Writer w, using the default options. If opts is nil, the default options are used.
Types ¶
type Options ¶
type Options struct { // Enable source code location (Default: false) AddSource bool // Minimum level to log (Default: slog.LevelInfo) Level slog.Leveler // ReplaceAttr is called to rewrite each non-group attribute before it is logged. // See https://pkg.go.dev/log/slog#HandlerOptions for details. ReplaceAttr func(groups []string, attr slog.Attr) slog.Attr // Time format (Default: time.StampMilli) TimeFormat string // Disable color (Default: false) NoColor bool }
Options for a slog.Handler that writes tinted logs. A zero Options consists entirely of default values.
Options can be used as a drop-in replacement for slog.HandlerOptions.
type WasmConsole ¶ added in v0.3.0
type WasmConsole struct { }
WasmConsole represent as browser Window.WasmConsole
func NewWasmConsole ¶ added in v0.3.0
func NewWasmConsole() *WasmConsole
func (*WasmConsole) Assert ¶ added in v0.3.0
func (p *WasmConsole) Assert(condition bool, a ...any)
https://developer.mozilla.org/en-US/docs/Web/API/console/assert
func (*WasmConsole) Clear ¶ added in v0.3.0
func (p *WasmConsole) Clear()
https://developer.mozilla.org/en-US/docs/Web/API/console/clear
func (*WasmConsole) Count ¶ added in v0.3.0
func (p *WasmConsole) Count(label string)
https://developer.mozilla.org/en-US/docs/Web/API/console/count
func (*WasmConsole) CountReset ¶ added in v0.3.0
func (p *WasmConsole) CountReset(label string)
https://developer.mozilla.org/en-US/docs/Web/API/console/countReset
func (*WasmConsole) Debug ¶ added in v0.3.0
func (p *WasmConsole) Debug(msg []byte)
https://developer.mozilla.org/en-US/docs/Web/API/console/debug
func (*WasmConsole) Dir ¶ added in v0.3.0
func (p *WasmConsole) Dir(obj any)
https://developer.mozilla.org/en-US/docs/Web/API/console/dir
func (*WasmConsole) Dirxml ¶ added in v0.3.0
func (p *WasmConsole) Dirxml(obj any)
https://developer.mozilla.org/en-US/docs/Web/API/console/dirxml
func (*WasmConsole) Error ¶ added in v0.3.0
func (p *WasmConsole) Error(msg []byte)
https://developer.mozilla.org/en-US/docs/Web/API/console/error
func (*WasmConsole) Group ¶ added in v0.3.0
func (p *WasmConsole) Group(label string)
https://developer.mozilla.org/en-US/docs/Web/API/console/group
func (*WasmConsole) GroupCollapsed ¶ added in v0.3.0
func (p *WasmConsole) GroupCollapsed(label string)
https://developer.mozilla.org/en-US/docs/Web/API/console/groupCollapsed
func (*WasmConsole) Info ¶ added in v0.3.0
func (p *WasmConsole) Info(msg []byte)
https://developer.mozilla.org/en-US/docs/Web/API/console/info
func (*WasmConsole) Log ¶ added in v0.3.0
func (p *WasmConsole) Log(msg []byte)
https://developer.mozilla.org/en-US/docs/Web/API/console/log
func (*WasmConsole) Table ¶ added in v0.3.0
func (p *WasmConsole) Table(data any)
https://developer.mozilla.org/en-US/docs/Web/API/console/table
func (*WasmConsole) Time ¶ added in v0.3.0
func (p *WasmConsole) Time(label string)
https://developer.mozilla.org/en-US/docs/Web/API/console/time
func (*WasmConsole) TimeEnd ¶ added in v0.3.0
func (p *WasmConsole) TimeEnd(label string)
https://developer.mozilla.org/en-US/docs/Web/API/console/timeEnd
func (*WasmConsole) TimeLog ¶ added in v0.3.0
func (p *WasmConsole) TimeLog(label string)
https://developer.mozilla.org/en-US/docs/Web/API/console/timeLog
func (*WasmConsole) Trace ¶ added in v0.3.0
func (p *WasmConsole) Trace(msg string, a ...any)
https://developer.mozilla.org/en-US/docs/Web/API/console/trace
func (*WasmConsole) Warn ¶ added in v0.3.0
func (p *WasmConsole) Warn(msg []byte)
https://developer.mozilla.org/en-US/docs/Web/API/console/warn