logx

package module
v0.2.1 Latest Latest
Warning

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

Go to latest
Published: Feb 9, 2026 License: MIT Imports: 7 Imported by: 0

README

logx

codecov Go Report Card Go Reference

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

Examples

Constants

This section is empty.

Variables

View Source
var (
	SetLogLevel  = handlers.SetLogLevel
	SetLogFormat = handlers.SetLogFormat
)

Functions

func Carry added in v0.1.1

func Carry(l Logger) contextx.Carrier

func With added in v0.1.1

func With(ctx context.Context, l Logger) context.Context

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"}}
	}

}

func Discard

func Discard() Logger

func Enter added in v0.0.2

func Enter(ctx context.Context, kvs ...any) (context.Context, Logger)

func From added in v0.1.1

func From(ctx context.Context) Logger

func New added in v0.2.0

func New(h slog.Handler) Logger

func NewStd added in v0.2.1

func NewStd() Logger

func NewZap added in v0.2.1

func NewZap() Logger

func NewZero added in v0.2.1

func NewZero() Logger

func Start

func Start(ctx context.Context, name string, kvs ...any) (context.Context, Logger)

type Printer

type Printer interface {
	Print(string)
	Printf(string, ...any)
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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