logger

package
v1.7.6 Latest Latest
Warning

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

Go to latest
Published: Apr 25, 2024 License: Apache-2.0 Imports: 2 Imported by: 0

README

Logger

功能

基本功能

  1. 支持基本的日志信息

    日志包需要支持基本的日志信息,包括时间戳、文件名、行号、日志级别和日志信息。

  2. 支持不同的日志级别

    • debug
    • info
    • warn
    • error
    • panic
    • fatal
  3. 支持自定义配置

    • 不同的环境可以配置输出不同级别的日志
  4. 支持输出到标准输出和文件

高级功能

  1. 支持多种日志格式

    • txt
    • json
  2. 能够按级别分类输出

  3. 支持结构化日志

    就是使用 JSON 或者其他编码方式使日志结构化,方便以后使用日志工具进行分析。

  4. 支持日志轮转

    需要确保日志大小达到一定量级时,对日志进行切割、压缩,并转存。可以按照日志大小进行切割,也可以按日期切割。 例如:lumberjack可以支持按大小和日期归档日志, file-rotatelogs 支持按小时数进行日志切割。

  5. 具备 Hook 能力

    当某个级别的日志产生时,发送邮件或者调用告警接口进行告警。很多优秀的开源日志包提供了 Hook 能力,例如 logrus 和 zap。

可选功能

  1. 支持颜色输出

  2. 兼容标准库 log 包

  3. 支持输出到不同的位置

    如果我们的日志包支持将日志投递到不同的目的端,那会是一项非常让人期待的功能

日志包设计关注点

  • 高性能:因为我们要在代码中频繁调用日志包,记录日志,所以日志包的性能是首先要考虑的点,一个性能很差的日志包必然会导致整个应用性能很差。
  • 并发安全:Go 应用程序会大量使用 Go 语言的并发特性,也就意味着需要并发地记录日志,这就需要日志包是并发安全的。
  • 插件化能力:日志包应该能提供一些插件化的能力,比如允许开发者自定义输出格式,自定义存储位置,自定义错误发生时的行为(例如 告警、发邮件等)。插件化的能力不是必需的,因为日志自身的特性就能满足绝大部分的使用需求,例如:输出格式支持 JSON 和 TEXT,存储位置支持标准输出和文件,日志监控可以通过一些旁路系统来实现。
  • 日志参数控制:日志包应该能够灵活地进行配置,初始化时配置或者程序运行时配置。例如:初始化配置可以通过 Init 函数完成,运行时配置可以通过 SetOptions / SetLevel 等函数来完成。

日志包使用

在何处打印日志?

  • 在分支语句处打印日志。在分支语句处打印日志,可以判断出代码走了哪个分支,有助于判断请求的下一跳,继而继续排查问题。
  • 写操作必须打印日志。写操作最可能会引起比较严重的业务故障,写操作打印日志,可以在出问题时找到关键信息。
  • 在循环中打印日志要慎重。如果循环次数过多,会导致打印大量的日志,严重拖累代码的性能,建议的办法是在循环中记录要点,在循环外面总结打印出来。
  • 在错误产生的最原始位置打印日志。对于嵌套的 Error,可在 Error 产生的最初位置打印 Error 日志,上层如果不需要添加必要的信息,可以直接返回下层的 Error。

使用什么日志级别

  • Debug

    为了获取足够的信息进行 Debug,通常会在 Debug 级别打印很多日志。例如,可以打印整个 HTTP 请求的请求 Body 或者响应 Body。

  • Info

    Info 级别的日志可以记录一些有用的信息,供以后的运营分析,所以 Info 级别的日志不是越多越好,也不是越少越好,应以满足需求为主要目标。一些关键日志,可以在 Info 级别记录,但如果日志量大、输出频度过高,则要考虑在 Debug 级别记录。现网的日志级别一般是 Info 级别,为了不使日志文件占满整个磁盘空间,在记录日志时,要注意避免产生过多的 Info 级别的日志。例如,在 for 循环中,就要慎用 Info 级别的日志。

  • Warn

    Warn 级别的日志往往说明程序运行异常,不符合预期,但又不影响程序的继续运行,或者是暂时影响,但后续会恢复。像这些日志,就需要你关注起来。Warn 更多的是业务级别的警告日志。

  • Error

    影响业务

  • Panic

    影响服务,但仍旧可以运行

  • Fatal

    影响服务,无法继续运行。

Documentation

Index

Constants

View Source
const (
	TextFormat = "text"
	JsonFormat = "json"
)

Variables

This section is empty.

Functions

func Debug

func Debug(msg string)

func Debugf

func Debugf(format string, values ...interface{})

func Error

func Error(msg string)

func Errorf

func Errorf(format string, values ...interface{})

func Fatal

func Fatal(msg string)

func Fatalf

func Fatalf(format string, values ...interface{})

func Info

func Info(msg string)

func Infof

func Infof(format string, values ...interface{})

func Panic

func Panic(msg string)

func Panicf

func Panicf(format string, values ...interface{})

func SetupGlobalLogger

func SetupGlobalLogger(logger Logger)

func Validate

func Validate(o *Options) []error

func Warn

func Warn(msg string)

func Warnf

func Warnf(format string, values ...interface{})

Types

type DefaultLogger added in v1.5.5

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

func (*DefaultLogger) Debug added in v1.5.5

func (d *DefaultLogger) Debug(msg string)

func (*DefaultLogger) Error added in v1.5.5

func (d *DefaultLogger) Error(msg string)

func (*DefaultLogger) Fatal added in v1.5.5

func (d *DefaultLogger) Fatal(msg string)

func (*DefaultLogger) Info added in v1.5.5

func (d *DefaultLogger) Info(msg string)

func (*DefaultLogger) Panic added in v1.5.5

func (d *DefaultLogger) Panic(msg string)

func (*DefaultLogger) V added in v1.5.5

func (d *DefaultLogger) V(level Level) StdLogger

func (*DefaultLogger) Warn added in v1.5.5

func (d *DefaultLogger) Warn(msg string)

func (*DefaultLogger) WithFields added in v1.5.5

func (d *DefaultLogger) WithFields(fields Fields) Logger

type Fields added in v1.7.0

type Fields map[string]interface{}

type Level

type Level int
const (
	DEBUG Level = iota
	INFO
	WARN
	ERROR
	PANIC
	FATAL
)

func (*Level) Parse

func (level *Level) Parse(l string) error

func (Level) String

func (level Level) String() string

type Logger

type Logger interface {
	Debug(msg string)
	Info(msg string)
	Warn(msg string)
	Error(msg string)
	Panic(msg string)
	Fatal(msg string)
	V(level Level) StdLogger
	WithFields(fields Fields) Logger
}

func GetLogger

func GetLogger() Logger

type Options

type Options struct {
	ErrorOutputPaths []string
	OutputPaths      []string
	Level            string
	Name             string
	EnableColor      bool
	Format           string
}

func NewOptions

func NewOptions() *Options

type StdLogger

type StdLogger interface {
	Print(...interface{})
	Printf(string, ...interface{})
	Println(...interface{})

	Fatal(...interface{})
	Fatalf(string, ...interface{})
	Fatalln(...interface{})

	Panic(...interface{})
	Panicf(string, ...interface{})
	Panicln(...interface{})
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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