从 v2.0
版本开始, glog
组件提供了超级强大的、可自定义日志处理的 Handler
特性。 Handler
采用了中间件设计方式,开发者可以为日志对象注册多个处理 Handler
,也可以在 Handler
中覆盖默认的日志组件处理逻辑。
相关定义
Handler
方法定义
// Handler is function handler for custom logging content outputs.
type Handler func(ctx context.Context, in *HandlerInput)
可以看到第二个参数为日志处理的日志信息,并且为指针类型,意味着在 Handler
中可以修改该参数的任意属性信息,并且修改后的内容将会传递给下一个 Handler
。
Handler
参数定义
// HandlerInput is the input parameter struct for logging Handler.
type HandlerInput struct {
Logger *Logger // Logger.
Ctx context.Context // Context.
Buffer *bytes.Buffer // Buffer for logging content outputs.
Time time.Time // Logging time, which is the time that logging triggers.
TimeFormat string // Formatted time string, like "2016-01-09 12:00:00".
Color int // Using color, like COLOR_RED, COLOR_BLUE, etc.
Level int // Using level, like LEVEL_INFO, LEVEL_ERRO, etc.
LevelFormat string // Formatted level string, like "DEBU", "ERRO", etc.
CallerFunc string // The source function name that calls logging.
CallerPath string // The source file path and its line number that calls logging.
CtxStr string // The retrieved context value string from context.
Prefix string // Custom prefix string for logging content.
Content string // Content is the main logging content that passed by you.
IsAsync bool // IsAsync marks it is in asynchronous logging.
handlerIndex int // Middleware handling index for internal usage.
}
开发者有两种方式修改默认的日志输出内容:
- 一种是直接修改
HandlerInput
中的属性信息,然后继续执行in.Next()
- 另一种自定义日志输出内容,将日志内容写入到
Buffer
中即可。
Handler
注册到 Logger
方法
// SetHandlers sets the logging handlers for current logger.
func (l *Logger) SetHandlers(handlers ...Handler)