问题:在用golang的Logrus库的时候,用Json格式记录日志,有时候希望加一些固定的Fields,比如在日志收集中心中,Log记录自己的程序名,又不想每次Log日志的时候,每处都手动添加到logrus.Fields中。
<br />
解决方法:这时可以使用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{})
网友评论