zap

package module
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Sep 22, 2023 License: Apache-2.0 Imports: 6 Imported by: 9

README

Hertz zap (This is a community driven project)

Introduction

This is a logger library that uses zap to implement the Hertz logger interface

Usage

Download and install it:

go get github.com/hertz-contrib/logger/zap

Import it in your code:

import hertzzap github.com/hertz-contrib/logger/

Simple Example:

package main

import (
	"github.com/cloudwego/hertz/pkg/common/hlog"
	hertzzap "github.com/hertz-contrib/logger/zap"
)

func main() {
	logger := hertzzap.NewLogger()
	hlog.SetLogger(logger)

	// ...

	hlog.Infof("hello %s", "hertz")
}

Multiple zapcore Example:

package main

import (
	"github.com/cloudwego/hertz/pkg/common/hlog"
	hertzzap "github.com/hertz-contrib/logger/zap"
	"github.com/natefinch/lumberjack"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"os"
)

func main() {
	dynamicLevel := zap.NewAtomicLevel()

	dynamicLevel.SetLevel(zap.DebugLevel)

	logger := NewLogger(
		WithCores([]CoreConfig{
			{
				Enc: zapcore.NewConsoleEncoder(humanEncoderConfig()),
				Ws:  zapcore.AddSync(os.Stdout),
				Lvl: dynamicLevel,
			},
			{
				Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
				Ws:  getWriteSyncer("./all/log.log"),
				Lvl: zap.NewAtomicLevelAt(zapcore.DebugLevel),
			},
			{
				Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
				Ws:  getWriteSyncer("./debug/log.log"),
				Lvl: zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
					return lev == zap.DebugLevel
				}),
			},
			{
				Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
				Ws:  getWriteSyncer("./info/log.log"),
				Lvl: zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
					return lev == zap.InfoLevel
				}),
			},
			{
				Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
				Ws:  getWriteSyncer("./warn/log.log"),
				Lvl: zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
					return lev == zap.WarnLevel
				}),
			},
			{
				Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
				Ws:  getWriteSyncer("./error/log.log"),
				Lvl: zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
					return lev >= zap.ErrorLevel
				}),
			},
		}...),
	)
	defer logger.Sync()

	hlog.Infof("hello %s", "hertz")
}

// humanEncoderConfig copy from zap
func humanEncoderConfig() zapcore.EncoderConfig {
	cfg := testEncoderConfig()
	cfg.EncodeTime = zapcore.ISO8601TimeEncoder
	cfg.EncodeLevel = zapcore.CapitalLevelEncoder
	cfg.EncodeDuration = zapcore.StringDurationEncoder
	return cfg
}

func getWriteSyncer(file string) zapcore.WriteSyncer {
	lumberJackLogger := &lumberjack.Logger{
		Filename:   file,
		MaxSize:    10,
		MaxBackups: 50000,
		MaxAge:     1000,
		Compress:   true,
		LocalTime:  true,
	}
	return zapcore.AddSync(lumberJackLogger)
}

// testEncoderConfig encoder config for testing, copy from zap
func testEncoderConfig() zapcore.EncoderConfig {
	return zapcore.EncoderConfig{
		MessageKey:     "msg",
		LevelKey:       "level",
		NameKey:        "name",
		TimeKey:        "ts",
		CallerKey:      "caller",
		FunctionKey:    "func",
		StacktraceKey:  "stacktrace",
		LineEnding:     "\n",
		EncodeTime:     zapcore.EpochTimeEncoder,
		EncodeLevel:    zapcore.LowercaseLevelEncoder,
		EncodeDuration: zapcore.SecondsDurationEncoder,
		EncodeCaller:   zapcore.ShortCallerEncoder,
	}
}

Attention

Method SetLevel() and SetOutput() only affect the first zapcore if imported multiple zapcore

For some reason, zap don't support log context info yet.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func InArray added in v1.1.0

func InArray(key ExtraKey, arr []ExtraKey) bool

InArray check if a string in a slice

Types

type CoreConfig

type CoreConfig struct {
	Enc zapcore.Encoder
	Ws  zapcore.WriteSyncer
	Lvl zapcore.LevelEnabler
}

type ExtraKey added in v1.1.0

type ExtraKey string

type Logger

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

func NewLogger

func NewLogger(opts ...Option) *Logger

func (*Logger) CtxDebugf

func (l *Logger) CtxDebugf(ctx context.Context, format string, v ...interface{})

func (*Logger) CtxErrorf

func (l *Logger) CtxErrorf(ctx context.Context, format string, v ...interface{})

func (*Logger) CtxFatalf

func (l *Logger) CtxFatalf(ctx context.Context, format string, v ...interface{})

func (*Logger) CtxInfof

func (l *Logger) CtxInfof(ctx context.Context, format string, v ...interface{})

func (*Logger) CtxLogf

func (l *Logger) CtxLogf(level hlog.Level, ctx context.Context, format string, kvs ...interface{})

func (*Logger) CtxNoticef

func (l *Logger) CtxNoticef(ctx context.Context, format string, v ...interface{})

func (*Logger) CtxTracef

func (l *Logger) CtxTracef(ctx context.Context, format string, v ...interface{})

func (*Logger) CtxWarnf

func (l *Logger) CtxWarnf(ctx context.Context, format string, v ...interface{})

func (*Logger) Debug

func (l *Logger) Debug(v ...interface{})

func (*Logger) Debugf

func (l *Logger) Debugf(format string, v ...interface{})

func (*Logger) Error

func (l *Logger) Error(v ...interface{})

func (*Logger) Errorf

func (l *Logger) Errorf(format string, v ...interface{})

func (*Logger) Fatal

func (l *Logger) Fatal(v ...interface{})

func (*Logger) Fatalf

func (l *Logger) Fatalf(format string, v ...interface{})

func (*Logger) GetExtraKeys added in v1.1.0

func (l *Logger) GetExtraKeys() []ExtraKey

GetExtraKeys get extraKeys from logger config

func (*Logger) Info

func (l *Logger) Info(v ...interface{})

func (*Logger) Infof

func (l *Logger) Infof(format string, v ...interface{})

func (*Logger) Log

func (l *Logger) Log(level hlog.Level, kvs ...interface{})

func (*Logger) Logf

func (l *Logger) Logf(level hlog.Level, format string, kvs ...interface{})

func (*Logger) Logger added in v1.1.0

func (l *Logger) Logger() *zap.Logger

Logger is used to return an instance of *zap.Logger for custom fields, etc.

func (*Logger) Notice

func (l *Logger) Notice(v ...interface{})

func (*Logger) Noticef

func (l *Logger) Noticef(format string, v ...interface{})

func (*Logger) PutExtraKeys added in v1.1.0

func (l *Logger) PutExtraKeys(keys ...ExtraKey)

PutExtraKeys add extraKeys after init

func (*Logger) SetLevel

func (l *Logger) SetLevel(level hlog.Level)

func (*Logger) SetOutput

func (l *Logger) SetOutput(writer io.Writer)

func (*Logger) Sync

func (l *Logger) Sync()

func (*Logger) Trace

func (l *Logger) Trace(v ...interface{})

func (*Logger) Tracef

func (l *Logger) Tracef(format string, v ...interface{})

func (*Logger) Warn

func (l *Logger) Warn(v ...interface{})

func (*Logger) Warnf

func (l *Logger) Warnf(format string, v ...interface{})

type Option

type Option interface {
	// contains filtered or unexported methods
}

func WithCoreEnc

func WithCoreEnc(enc zapcore.Encoder) Option

WithCoreEnc zapcore encoder

func WithCoreLevel

func WithCoreLevel(lvl zap.AtomicLevel) Option

WithCoreLevel zapcore log level

func WithCoreWs

func WithCoreWs(ws zapcore.WriteSyncer) Option

WithCoreWs zapcore write syncer

func WithCores

func WithCores(coreConfigs ...CoreConfig) Option

WithCores zapcore

func WithExtraKeyAsStr added in v1.1.0

func WithExtraKeyAsStr() Option

WithExtraKeyAsStr convert extraKey to a string type when retrieving value from context Not recommended for use, only for compatibility with certain situations

For more information, refer to the documentation at `https://pkg.go.dev/context#WithValue`

func WithExtraKeys added in v1.1.0

func WithExtraKeys(keys []ExtraKey) Option

WithExtraKeys allow you log extra values from context

func WithZapOptions

func WithZapOptions(opts ...zap.Option) Option

WithZapOptions add origin zap option

Jump to

Keyboard shortcuts

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