xslog

package module
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Jan 8, 2025 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

Package xlog provides extentions and adapters to standard logging.

This packages is primary used to wrap various log engines with slog.Handler.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func WithSlogFields

func WithSlogFields(ctx context.Context, attrs ...slog.Attr) context.Context

WithSlogFields will append to internal store (if exists, otherwise will create a new one) new attributes. NOTE: appended attributes will be visible to the upper callers as well, i.e. if function A adds log field and then calls function B which adds log field, after exiting from function B and logging in function A, there will be both added log fields.

Types

type HandlerOptions

type HandlerOptions struct {
	// Does not print timestamp even if it set by slog.
	SkipTime bool
}

HandlerOptions allowes to adjust behaviour of the zerolog handler.

type ZerologHandler

type ZerologHandler struct {
	// contains filtered or unexported fields
}

func NewZerologHandler

func NewZerologHandler(log zerolog.Logger, opts *HandlerOptions) *ZerologHandler

NewZerologHandler creates a wraper over Zerolog to be used as slog.Handler.

Example
logger := zerolog.New(os.Stdout)
handler := NewZerologHandler(logger, &HandlerOptions{SkipTime: true})
log := slog.New(handler)

log.
	With(slog.Int("id", 1)).
	WithGroup("bro").
	With(slog.Int("bro_id", 2)).
	WithGroup("group_1").
	With(slog.Int("group_id", 3)).
	Warn("run", slog.String("who", "forest"))
Output:
{"level":"warn","id":1,"bro":{"bro_id":2,"group_1":{"group_id":3,"who":"forest"}},"message":"run"}

func (*ZerologHandler) Enabled

func (h *ZerologHandler) Enabled(ctx context.Context, level slog.Level) (enabled bool)

Enabled reports whether the handler handles records at the given level. The handler ignores records whose level is lower. It is called early, before any arguments are processed, to save effort if the log event should be discarded. If called from a Logger method, the first argument is the context passed to that method, or context.Background() if nil was passed or the method does not take a context. The context is passed so Enabled can use its values to make a decision.

Enabled implements slog.Handler interface.

func (*ZerologHandler) Handle

func (h *ZerologHandler) Handle(ctx context.Context, record slog.Record) error

Handle handles the Record. It will only be called when Enabled returns true. The Context argument is as for Enabled. It is present solely to provide Handlers access to the context's values. Canceling the context should not affect record processing. (Among other things, log messages may be necessary to debug a cancellation-related problem.)

Handle methods that produce output should observe the following rules:

  • If r.Time is the zero time, ignore the time.

  • If r.PC is zero, ignore it.

  • Attr's values should be resolved.

  • If an Attr's key and value are both the zero value, ignore the Attr. This can be tested with attr.Equal(Attr{}).

  • If a group's key is empty, inline the group's Attrs.

  • If a group has no Attrs (even if it has a non-empty key), ignore it.

.

Handle implements slog.Handler interface.

func (*ZerologHandler) WithAttrs

func (h *ZerologHandler) WithAttrs(attrs []slog.Attr) slog.Handler

WithAttrs returns a new Handler whose attributes consist of both the receiver's attributes and the arguments. The Handler owns the slice: it may retain, modify or discard it.

WithAttrs implements slog.Handler interface

func (*ZerologHandler) WithGroup

func (h *ZerologHandler) WithGroup(name string) slog.Handler

WithGroup returns a new Handler with the given group appended to the receiver's existing groups. The keys of all subsequent attributes, whether added by With or in a Record, should be qualified by the sequence of group names.

How this qualification happens is up to the Handler, so long as this Handler's attribute keys differ from those of another Handler with a different sequence of group names.

A Handler should treat WithGroup as starting a Group of Attrs that ends at the end of the log event. That is,

logger.WithGroup("s").LogAttrs(ctx, level, msg, slog.Int("a", 1), slog.Int("b", 2))

should behave like

logger.LogAttrs(ctx, level, msg, slog.Group("s", slog.Int("a", 1), slog.Int("b", 2)))

If the name is empty, WithGroup returns the receiver.

WithGroup implements slog.Handler interface.

Jump to

Keyboard shortcuts

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