logger

package
v1.7.10 Latest Latest
Warning

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

Go to latest
Published: Oct 10, 2024 License: Apache-2.0 Imports: 1 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(args ...interface{})

Debug logs a debug message.

func Debugf

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

Debugf logs a debug message with formatting.

func Debugln added in v1.7.7

func Debugln(args ...interface{})

Debugln logs a debug message with a line break.

func Error

func Error(args ...interface{})

Error logs an error message.

func Errorf

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

Errorf logs an error message with formatting.

func Errorln added in v1.7.7

func Errorln(args ...interface{})

Errorln logs an error message with a line break.

func Fatal

func Fatal(args ...interface{})

Fatal logs a fatal message.

func Fatalf

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

Fatalf logs a fatal message with formatting.

func Fatalln added in v1.7.7

func Fatalln(args ...interface{})

Fatalln logs a fatal message with a line break.

func Info

func Info(args ...interface{})

Info logs an info message.

func Infof

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

Infof logs an info message with formatting.

func Infoln added in v1.7.7

func Infoln(args ...interface{})

Infoln logs an info message with a line break.

func Panic

func Panic(args ...interface{})

Panic logs a panic message.

func Panicf

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

Panicf logs a panic message with formatting.

func Panicln added in v1.7.7

func Panicln(args ...interface{})

Panicln logs a panic message with a line break.

func Print added in v1.7.7

func Print(args ...interface{})

Print logs a message.

func Printf added in v1.7.7

func Printf(format string, args ...interface{})

Printf logs a message with formatting.

func Println added in v1.7.7

func Println(args ...interface{})

Println logs a message with a line break.

func SetupGlobalLogger

func SetupGlobalLogger(logger Logger)

func Warn

func Warn(args ...interface{})

Warn logs a warning message.

func Warnf

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

Warnf logs a warning message with formatting.

func Warning added in v1.7.7

func Warning(args ...interface{})

Warning logs a warning message.

func Warningf added in v1.7.7

func Warningf(format string, args ...interface{})

Warningf logs a warning message with formatting.

func Warningln added in v1.7.7

func Warningln(args ...interface{})

Warningln logs a warning message with a line break.

func Warnln added in v1.7.7

func Warnln(args ...interface{})

Warnln logs a warning message with a line break.

Types

type Base added in v1.7.9

type Base interface {
	Debugf(format string, args ...interface{})
	Infof(format string, args ...interface{})
	Printf(format string, args ...interface{})
	Warnf(format string, args ...interface{})
	Warningf(format string, args ...interface{})
	Errorf(format string, args ...interface{})
	Fatalf(format string, args ...interface{})
	Panicf(format string, args ...interface{})

	Debug(args ...interface{})
	Info(args ...interface{})
	Print(args ...interface{})
	Warn(args ...interface{})
	Warning(args ...interface{})
	Error(args ...interface{})
	Fatal(args ...interface{})
	Panic(args ...interface{})

	Debugln(args ...interface{})
	Infoln(args ...interface{})
	Println(args ...interface{})
	Warnln(args ...interface{})
	Warningln(args ...interface{})
	Errorln(args ...interface{})
	Fatalln(args ...interface{})
	Panicln(args ...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 {
	Base
	WithFields(fields map[string]interface{}) Logger
	V(level Level) StdLogger
}

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

func (*Options) Validate added in v1.7.7

func (o *Options) Validate() []error

type StdLogger

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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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