Вам не нужно устанавливать эти параметры в каждом файле с Logrus.
Вы можете импортировать Логрус как log
:
import log "github.com/Sirupsen/logrus"
Тогда такие функции, как log.SetOutput()
, являются просто функциями и модифицируют глобальный регистратор и применяются к любому файлу, который включает этот импорт.
Вы можете создать глобальную log
переменную пакета:
var log = logrus.New()
Тогда такие функции, как log.SetOutput()
, являются методами и изменяют ваш пакет глобально. Это неудобно, ИМО, если у вас есть несколько пакетов в вашей программе, потому что у каждого из них есть другой регистратор с разными настройками (но, возможно, это хорошо для некоторых случаев использования). Мне также не нравится этот подход, потому что он сбивает с толку goimports
(который захочет вставить log
в ваш список импорта).
Или вы можете создать свою собственную оболочку (что я и делаю). У меня есть собственный log
пакет со своим logger
var:
var logger = logrus.New()
Затем делаю функции верхнего уровня для обертывания Логруса:
func Info(args ...interface{}) {
logger.Info(args...)
}
func Debug(args ...interface{}) {
logger.Debug(args...)
}
Это немного утомительно, но позволяет мне добавлять функции, специфичные для моей программы:
func WithConn(conn net.Conn) *logrus.Entry {
var addr string = "unknown"
if conn != nil {
addr = conn.RemoteAddr().String()
}
return logger.WithField("addr", addr)
}
func WithRequest(req *http.Request) *logrus.Entry {
return logger.WithFields(RequestFields(req))
}
Итак, я могу делать такие вещи, как:
log.WithConn(c).Info("Connected")
(Я планирую в будущем обернуть logrus.Entry
в свой собственный тип, чтобы лучше связать их; в настоящее время я не могу вызвать log.WithConn(c).WithRequest(r).Error(...)
, потому что не могу добавить WithRequest()
к logrus.Entry
.)
person
Rob Napier
schedule
15.05.2015