loggers

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Sep 5, 2021 License: MIT Imports: 5 Imported by: 0

README

loggers

Go Reference

Package loggers centrally manages *zap.Logger throughout and across packages.

var (
	logger *zap.Logger = zap.NewNop()
	logA   *zap.Logger = logger
	logB   *zap.Logger = logger
	logC   *zap.Logger = logger
	logD   *zap.Logger = logger
)

func setA(logger *zap.Logger) { logA = logger }
func setB(logger *zap.Logger) { logB = logger }
func setC(logger *zap.Logger) { logC = logger }
func setD(logger *zap.Logger) { logD = logger }

func main() {
	loggers.RegisterName(setA, "a")
	loggers.RegisterName(setB, "b")
	loggers.RegisterName(setC, "c")
	loggers.RegisterName(setD, "d")

	logger = zap.NewExample(zap.IncreaseLevel(zapcore.InfoLevel))

	loggers.SetLogger(logger, "a=debug", "b=warn", "c")

	// logger's level enabler is Info, so...
	logger.Debug("logger", zap.Bool("skip", true)) // skip
	logger.Info("logger", zap.Bool("skip", false)) // ok
	logger.Warn("logger", zap.Bool("skip", false)) // ok

	// logA's level enabler is debug, so...
	logA.Debug("logA", zap.Bool("skip", false)) // ok
	logA.Info("logA", zap.Bool("skip", false))  // ok
	logA.Warn("logA", zap.Bool("skip", false))  // ok

	// logB's level enabler is warn, so...
	logB.Debug("logB", zap.Bool("skip", true)) // skip
	logB.Info("logB", zap.Bool("skip", true))  // skip
	logB.Warn("logB", zap.Bool("skip", false)) // ok

	// logC's level enabler is same as logger's Info, so...
	logC.Debug("logC", zap.Bool("skip", true)) // skip
	logC.Info("logC", zap.Bool("skip", false)) // ok
	logC.Warn("logC", zap.Bool("skip", false)) // ok

	// logD's logger is Nop, so...
	logD.Debug("logD", zap.Bool("skip", true)) // skip
	logD.Info("logD", zap.Bool("skip", true))  // skip
	logD.Warn("logD", zap.Bool("skip", true))  // skip
}

Documentation

Overview

Package loggers centrally manages *zap.Logger throughout and across packages.

Example
package main

import (
	"github.com/takumakei/go-zap/loggers"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

var (
	logger *zap.Logger = zap.NewNop()
	logA   *zap.Logger = logger
	logB   *zap.Logger = logger
	logC   *zap.Logger = logger
	logD   *zap.Logger = logger
)

func setA(logger *zap.Logger) { logA = logger }
func setB(logger *zap.Logger) { logB = logger }
func setC(logger *zap.Logger) { logC = logger }
func setD(logger *zap.Logger) { logD = logger }

func main() {
	loggers.RegisterName(setA, "a")
	loggers.RegisterName(setB, "b")
	loggers.RegisterName(setC, "c")
	loggers.RegisterName(setD, "d")

	logger = zap.NewExample(zap.IncreaseLevel(zapcore.InfoLevel))

	if err := loggers.SetLogger(logger, "a=debug", "b=warn", "c"); err != nil {
		logger.Fatal("loggers.SetLogger", zap.Error(err))
	}

	// logger's level enabler is Info, so...
	logger.Debug("logger", zap.Bool("skip", true)) // skip
	logger.Info("logger", zap.Bool("skip", false)) // ok
	logger.Warn("logger", zap.Bool("skip", false)) // ok

	// logA's level enabler is debug, so...
	logA.Debug("logA", zap.Bool("skip", false)) // ok
	logA.Info("logA", zap.Bool("skip", false))  // ok
	logA.Warn("logA", zap.Bool("skip", false))  // ok

	// logB's level enabler is warn, so...
	logB.Debug("logB", zap.Bool("skip", true)) // skip
	logB.Info("logB", zap.Bool("skip", true))  // skip
	logB.Warn("logB", zap.Bool("skip", false)) // ok

	// logC's level enabler is same as logger's Info, so...
	logC.Debug("logC", zap.Bool("skip", true)) // skip
	logC.Info("logC", zap.Bool("skip", false)) // ok
	logC.Warn("logC", zap.Bool("skip", false)) // ok

	// logD's logger is Nop, so...
	logD.Debug("logD", zap.Bool("skip", true)) // skip
	logD.Info("logD", zap.Bool("skip", true))  // skip
	logD.Warn("logD", zap.Bool("skip", true))  // skip
}
Output:

{"level":"info","msg":"logger","skip":false}
{"level":"warn","msg":"logger","skip":false}
{"level":"debug","msg":"logA","skip":false}
{"level":"info","msg":"logA","skip":false}
{"level":"warn","msg":"logA","skip":false}
{"level":"warn","msg":"logB","skip":false}
{"level":"info","msg":"logC","skip":false}
{"level":"warn","msg":"logC","skip":false}

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func L

func L(loggers ...*zap.Logger) *zap.Logger

L returns the first non-nil Logger in loggers or no-op Logger, never returns nil.

func Names

func Names() []string

Names returns names registered.

func Nop

func Nop() *zap.Logger

Nop returns always the same instance of no-op Logger.

func Register

func Register(setter Setter)

Register registers the setter function by its package name. It panics if the package name is already registered.

func RegisterName

func RegisterName(setter Setter, name string)

RegisterName registers the setter function by name. It panics if name is already registered.

func ResetLevel

func ResetLevel(enab zapcore.LevelEnabler) zap.Option

ResetLevel returns an option that resets the LevelEnabler of the core.

Example
package main

import (
	"github.com/takumakei/go-zap/loggers"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

func main() {
	logWarn := zap.NewExample(
		zap.IncreaseLevel(zap.WarnLevel),
	)

	logInfo := logWarn.WithOptions(
		loggers.ResetLevel(zapcore.DebugLevel),
	)

	logWarn.Info("info")
	logWarn.Warn("warn")
	logInfo.Info("info")
	logInfo.Warn("warn")

}
Output:

{"level":"warn","msg":"warn"}
{"level":"info","msg":"info"}
{"level":"warn","msg":"warn"}

func SetLogger

func SetLogger(logger *zap.Logger, names ...string) error

SetLogger calls registered setter functions by name. Each name may have a log level suffix like '=debug'.

Types

type Setter

type Setter func(*zap.Logger)

Setter is type of the function that the package receives the logger.

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

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