package logrus_caller import ( "github.com/Sirupsen/logrus" "path/filepath" "runtime" "strconv" "strings" ) type CallerHook struct { } func (hook *CallerHook) Fire(entry *logrus.Entry) error { entry.Data["caller"] = hook.caller() return nil } func (hook *CallerHook) Levels() []logrus.Level { return []logrus.Level{ logrus.PanicLevel, logrus.FatalLevel, logrus.ErrorLevel, logrus.WarnLevel, logrus.InfoLevel, logrus.DebugLevel, } } func (hook *CallerHook) caller() string { if _, file, line, ok := runtime.Caller(6); ok { return strings.Join([]string{filepath.Base(file), strconv.Itoa(line)}, ":") } // not sure what the convention should be here return "" }