Documentation
¶
Overview ¶
Example (Loggers) ¶
package main
import (
"errors"
"io"
"time"
"github.com/xoctopus/logx"
"github.com/xoctopus/logx/handlers"
)
var v = struct {
A string `json:"a"`
B int `json:"b"`
Time time.Time `json:"time"`
}{
A: "a",
B: 10,
Time: time.Now(),
}
// handlers
var (
hstd = handlers.Std(io.Discard).WithGroup("std")
hzap = handlers.Zap(io.Discard).WithGroup("zap")
hzero = handlers.Zero(io.Discard).WithGroup("zero")
)
// loggers
var (
lstd = logx.New(hstd)
lzap = logx.New(hzap)
lzero = logx.New(hzero)
)
func main() {
lzap.With("key", "value").Info("string")
lzap.With("key", v).Info("any")
lzap.With("int", 1, "string", "string").Error(errors.New("fields"))
lstd.With("key", "value").Info("string")
lstd.With("key", v).Info("any")
lstd.With("int", 1, "string", "string").Error(errors.New("fields"))
lzero.With("key", "value").Info("string")
lzero.With("key", v).Info("any")
lzero.With("int", 1, "string", "string").Error(errors.New("fields"))
}
Index ¶
- Variables
- func Carry(l Logger) contextx.Carrier
- func With(ctx context.Context, l Logger) context.Context
- type Logger
- func Discard() Logger
- func Enter(ctx context.Context, kvs ...any) (context.Context, Logger)
- func From(ctx context.Context) Logger
- func New(h slog.Handler) Logger
- func NewStd() Logger
- func NewZap() Logger
- func NewZero() Logger
- func Start(ctx context.Context, name string, kvs ...any) (context.Context, Logger)
- type Printer
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( SetLogLevel = handlers.SetLogLevel SetLogFormat = handlers.SetLogFormat )
Functions ¶
Types ¶
type Logger ¶
type Logger interface {
Start(ctx context.Context, name string, kvs ...any) (context.Context, Logger)
End()
With(kvs ...any) Logger
Debug(msg string, args ...any)
Info(msg string, args ...any)
Warn(err error)
Error(err error)
}
Example ¶
package main
import (
"context"
"errors"
"strconv"
"github.com/xoctopus/logx"
"github.com/xoctopus/logx/handlers"
)
func main() {
ctx := context.Background()
{
_, log := logx.Start(ctx, "span1", "k1", "v1")
log.Debug("test %d", 1)
log.Info("test %d", 1)
log.Warn(errors.New("error message"))
log.Error(errors.New("error message"))
log.End()
// 2025/02/08 16:36:00 DEBUG test 1 span1.k1=v1
// 2025/02/08 16:36:00 INFO test 1 span1.k1=v1
// 2025/02/08 16:36:00 WARN error message span1.k1=v1
// 2025/02/08 16:36:00 ERROR error message span1.k1=v1
}
{
handlers.SetLogLevel(handlers.LogLevelError)
ctx = logx.With(context.Background(), logx.NewStd())
_, log := logx.Start(ctx, "span2", "k2", "v2")
log.Debug("test %d", 2)
log.Info("test %d", 2)
log.Warn(errors.New("error message"))
log.Error(errors.New("error message"))
// {"@ts":"20250208-163600.300","@lv":"err","@src":"github.com/xoctopus/logx_test/logx_test.go:31","@msg":"error message","span2":{"k2":"v2"}}
log.End()
}
{
handlers.SetLogFormat(handlers.LogFormatTEXT)
ctx = logx.Carry(logx.NewZap())(context.Background())
_, log := logx.Start(ctx, "span3")
// ...
log = log.With("k3", "v3")
log.Debug("test %d", 3)
log.Info("test %d", 3)
log.Warn(errors.New("error message"))
log.Error(errors.New("error message"))
log.End()
// @ts=20250208-163600.301 @lv=err @src=github.com/xoctopus/logx_test/logx_test.go:47 @msg="error message" span3.k3=v3
}
{
ctx = logx.With(context.Background(), logx.Discard())
_, log := logx.Start(ctx, "span4")
log = log.With("k4", "v4")
log.Debug("test %d", 4)
log.Info("test %d", 4)
log.Warn(errors.New("error message"))
log.Error(errors.New("error message"))
log.End()
// no output
}
{
ctx = logx.With(context.Background(), logx.NewZero())
_, log := logx.From(ctx).Start(ctx, "span5", "k5", "v5")
log.Debug("test %d", 5)
log.Info("test %d", 5)
log.Warn(errors.New("error message"))
log.Error(errors.New("error message"))
log.End()
}
{
handlers.SetLogFormat(handlers.LogFormatTEXT)
handlers.SetLogLevel(handlers.LogLevelDebug)
var f func(ctx context.Context, depth, current int)
f = func(ctx context.Context, depth, current int) {
name := "span" + strconv.Itoa(current)
_, log := logx.From(ctx).Start(ctx, name, "depth", current)
defer log.End()
if current < depth {
f(logx.With(ctx, log), depth, current+1)
}
log.Error(errors.New(name))
}
ctx = logx.With(context.Background(), logx.New(handlers.Std()))
f(ctx, 2, 1)
// @ts=20250208-204404.397 @lv=err @src=github.com/xoctopus/logx_test/logx_test.go:101 @msg=span2 span1.depth=1 span1.span1/span2.depth=2
// @ts=20250208-204404.397 @lv=err @src=github.com/xoctopus/logx_test/logx_test.go:101 @msg=span1 span1.depth=1
}
{
handlers.SetLogFormat(handlers.LogFormatJSON)
ctx = logx.With(context.Background(), logx.New(handlers.Std()))
_, log := logx.Enter(ctx, "k1", "v1")
log.Debug("test %d", 1)
log.Info("test %d", 1)
log.Warn(errors.New("error message"))
log.Error(errors.New("error message"))
log.End()
// {"@ts":"20251103-161757.172","@lv":"deb","@src":"github.com/xoctopus/logx_test/logx_test.go:118","@msg":"test 1","github.com/xoctopus/logx_test.ExampleLogger":{"k1":"v1"}}
// {"@ts":"20251103-161757.172","@lv":"inf","@src":"github.com/xoctopus/logx_test/logx_test.go:119","@msg":"test 1","github.com/xoctopus/logx_test.ExampleLogger":{"k1":"v1"}}
// {"@ts":"20251103-161757.172","@lv":"wrn","@src":"github.com/xoctopus/logx_test/logx_test.go:120","@msg":"error message","github.com/xoctopus/logx_test.ExampleLogger":{"k1":"v1"}}
// {"@ts":"20251103-161757.172","@lv":"err","@src":"github.com/xoctopus/logx_test/logx_test.go:121","@msg":"error message","github.com/xoctopus/logx_test.ExampleLogger":{"k1":"v1"}}
}
}
Click to show internal directories.
Click to hide internal directories.