logz

package module
v0.5.0 Latest Latest
Warning

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

Go to latest
Published: Sep 20, 2023 License: MIT Imports: 8 Imported by: 38

README

logz - Zerolog Helper

This library help to easily initialize log formats in projects.

go get github.com/worldline-go/logz

Check helper for other modules:

- logfx -> zerolog for uber fx dependecy injection library
- logecho -> zerolog for echo web framework

Usage

InitializeLog auto format, json or pretty print.
Use LOG_PRETTY boolean env value (1, t, T, TRUE, true, True) to set it.

logz.InitializeLog()

log.Info().Msg("Log test 1 2 1 2")

Caller disabled by default to enable it set with config.

logz.InitializeLog(logz.WithCaller(true))

To modify the default logger with adding some additional values:

logz.InitializeLog(
    logz.WithLogContextFunc(func(ctx zerolog.Context) zerolog.Context {
        return ctx.Str("log_source", "main")
    }),
    logz.WithServiceInfo("awesome-service", "v0.2.4"),
)

InitializeLog also adds the generated logger to the DefaultContextLogger.
If not found any logger in context, it will return log.Logger.

ctx = log.Ctx(ctx).With().Str("component", "context-test").Logger().WithContext(ctx)
log.Ctx(ctx).Info().Msg("testing")
// 2023-03-10 14:37:24 CET INF _example/main.go:38 > testing component=context-test

To change formats, change logz values before the initialize.

logz.TimeFormat       = time.RFC3339Nano
logz.TimePrettyFormat = "2006-01-02 15:04:05 MST"

Results of example go run --trimpath _example/main.go

In pretty format

2023-03-15 10:11:58 CET INF ./main.go:25 > default ctx log log_source=main service_name=awesome-service service_version=v0.2.4
2023-03-15 10:11:58 CET INF ./main.go:27 > Log test 1 2 1 2 log_source=main service_name=awesome-service service_version=v0.2.4
2023-03-15 10:11:58 CET ERR github.com/worldline-go/logz/adapters.go:49 > this is message err="failed x" log_source=mycomponent
2023-03-15 10:11:58 CET DBG ./main.go:37 > helloo level info but show debug component=test log_source=main service_name=awesome-service service_version=v0.2.4
2023-03-15 10:11:58 CET INF ./main.go:43 > testing component=context-test log_source=main service_name=awesome-service service_version=v0.2.4

In container

{"level":"info","time":"2022-11-24T14:56:00.611277862+01:00","caller":"./main.go:20","message":"default ctx log"}
{"level":"info","time":"2022-11-24T14:56:00.611330401+01:00","caller":"./main.go:22","message":"Log test 1 2 1 2"}
{"level":"error","log_source":"mycomponent","err":"failed x","time":"2022-11-24T14:56:00.611339445+01:00","caller":"github.com/worldline-go/logz/adapters.go:31","message":"this is message"}
{"level":"info","component":"test","time":"2022-11-24T14:56:00.611348632+01:00","caller":"./main.go:32","level":"debug","message":"helloo level info but show debug"}
With LogLevel

Hooks usable for forcing to print level information.
But still we need to use a level writer to effect enable/disable in log level modes.

logPull := log.Ctx(ctx).With().Str("component", "test").Logger().Hook(logz.Hooks.DebugHook)
_, _ = io.Copy(logz.LevelWriter(&logPull, zerolog.DebugLevel), strings.NewReader("message X"))

Example for echo webframework with lecho

e.Logger = lecho.New(log.Logger)

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	EnvPretty        = "LOG_PRETTY"
	EnvLevel         = "LOG_LEVEL"
	TimeFormat       = time.RFC3339Nano
	TimePrettyFormat = "2006-01-02 15:04:05 MST"
)
View Source
var Default = struct {
	TimeStamp bool
	Caller    bool
	Pretty    Selection
	Level     string
}{
	TimeStamp: true,
	Caller:    true,
	Pretty:    SelectAuto,
	Level:     "info",
}
View Source
var Hooks = zerolog.LevelHook{
	DebugHook:   LogHook{Level: zerolog.LevelDebugValue},
	InfoHook:    LogHook{Level: zerolog.LevelInfoValue},
	WarnHook:    LogHook{Level: zerolog.LevelWarnValue},
	ErrorHook:   LogHook{Level: zerolog.LevelErrorValue},
	FatalHook:   LogHook{Level: zerolog.LevelFatalValue},
	PanicHook:   LogHook{Level: zerolog.LevelPanicValue},
	TraceHook:   LogHook{Level: zerolog.LevelTraceValue},
	NoLevelHook: LogHook{Level: ""},
}

Hooks pass level informations to loggers.

View Source
var LogWriter = zerolog.ConsoleWriter{
	Out: os.Stderr,
	FormatTimestamp: func(i interface{}) string {
		if i == nil {
			return ""
		}

		parse, _ := time.Parse(TimeFormat, i.(string))

		return parse.Format(TimePrettyFormat)
	},
}

Functions

func InitializeLog

func InitializeLog(opts ...Option)

InitializeLog choice between json format or common format. LOG_PRETTY boolean environment value always override the decision. Override with some option argument.

func LevelWriter

func LevelWriter(e zerolog.Logger, lvl zerolog.Level) io.Writer

LevelWriter function eliminate logger based on level with manually. This is usable for writer loggers.

func Logger added in v0.3.0

func Logger(opts ...Option) zerolog.Logger

func SetLogLevel

func SetLogLevel(logLevel string) error

SetLogLevel globally changes zerolog's level.

Types

type Adapter added in v0.3.2

type Adapter interface {
	Error(msg string, keysAndValues ...interface{})
	Info(msg string, keysAndValues ...interface{})
	Debug(msg string, keysAndValues ...interface{})
	Warn(msg string, keysAndValues ...interface{})
}

type AdapterKV

type AdapterKV struct {
	Log        zerolog.Logger
	FrameCount int
	Caller     bool
}

AdapterKV fit for msg, keyvalue interface, Ex: retryablehttp.

myLogFormat := log.With().Str("log_source", "mycomponent").Logger()
kvLogger := logz.AdapterKV{Log: myLogFormat}
kvLogger.Error("this is message", "err", "failed x")

func (AdapterKV) Debug

func (l AdapterKV) Debug(msg string, keysAndValues ...interface{})

func (AdapterKV) Error

func (l AdapterKV) Error(msg string, keysAndValues ...interface{})

func (AdapterKV) Info

func (l AdapterKV) Info(msg string, keysAndValues ...interface{})

func (AdapterKV) Warn

func (l AdapterKV) Warn(msg string, keysAndValues ...interface{})

type AdapterNoop added in v0.3.2

type AdapterNoop struct{}

func (AdapterNoop) Debug added in v0.3.2

func (AdapterNoop) Debug(msg string, keysAndValues ...interface{})

func (AdapterNoop) Error added in v0.3.2

func (AdapterNoop) Error(msg string, keysAndValues ...interface{})

func (AdapterNoop) Info added in v0.3.2

func (AdapterNoop) Info(msg string, keysAndValues ...interface{})

func (AdapterNoop) Warn added in v0.3.2

func (AdapterNoop) Warn(msg string, keysAndValues ...interface{})

type LogHook

type LogHook struct {
	Level string
}

func (LogHook) Run

func (h LogHook) Run(e *zerolog.Event, _ zerolog.Level, msg string)

type Option added in v0.3.0

type Option func(options *options)

func WithCaller added in v0.3.0

func WithCaller(caller bool) Option

func WithLevel added in v0.4.0

func WithLevel(level string) Option

func WithLogContextFunc added in v0.3.3

func WithLogContextFunc(fn func(zerolog.Context) zerolog.Context) Option

func WithPretty added in v0.3.0

func WithPretty(pretty bool) Option

func WithServiceInfo added in v0.3.3

func WithServiceInfo(serviceName, serviceVersion string) Option

func WithTimeStamp added in v0.3.0

func WithTimeStamp(timeStamp bool) Option

type Selection added in v0.2.0

type Selection uint8
const (
	SelectAuto Selection = iota
	SelectTrue
	SelectFalse
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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