Logrus Hook

问题:在用golang的Logrus库的时候,用Json格式记录日志,有时候希望加一些固定的Fields,比如在日志收集中心中,Log记录自己的程序名,又不想每次Log日志的时候,每处都手动添加到logrus.Fields中。


解决方法:这时可以使用logrus的Hook来完成这个功能。每此写入日志时拦截,修改logrus.Entry。


logrus的Hook接口
type Hook interface { 
    Levels() []Level 
    Fire(*Entry) error
}
自己实现Hook接口
type DefaultFieldsHook struct {
}

func (df *DefaultFieldsHook) Fire(entry *log.Entry) error {
    entry.Data["appName"] = "MyAppName"
    return nil
}

func (df *DefaultFieldsHook) Levels() []log.Level {
    return log.AllLevels
}

log.SetFormatter(&log.JSONFormatter{})
// 添加自己实现的Hook
log.AddHook(&DefaultFieldsHook{})

你可能感兴趣的:(Logrus Hook)