Non è necessario impostare queste opzioni in ciascun file con Logrus.
È possibile importare Logrus come log
:
import log "github.com/Sirupsen/logrus"
Poi funzioni come log.SetOutput()
sono solo le funzioni e modificare il logger globale e si applicano a qualsiasi tipo di file che include questa importazione.
è possibile creare una variabile del pacchetto globale log
:
var log = logrus.New()
Poi funzioni come log.SetOutput()
sono metodi e modificare il pacchetto globale. Questo è IMO imbarazzante se si hanno più pacchetti nel programma, poiché ognuno di essi ha un registratore diverso con impostazioni diverse (ma forse è buono per alcuni casi d'uso). Anche questo approccio non mi piace perché confonde lo goimports
(che vorrebbe inserire log
nell'elenco delle importazioni).
Oppure è possibile creare il proprio wrapper (che è quello che faccio). Ho il mio pacchetto log
con il proprio logger
var:
var logger = logrus.New()
poi faccio funzioni di primo livello per avvolgere Logrus:
func Info(args ...interface{}) {
logger.Info(args...)
}
func Debug(args ...interface{}) {
logger.Debug(args...)
}
Questo è un po 'noioso, ma mi permette di aggiungere funzioni specifiche per il mio programma:
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))
}
modo che io possa poi fare cose come:
log.WithConn(c).Info("Connected")
(Ho in programma in futuro di avvolgere logrus.Entry
nel mio tipo in modo da poter concatenarli meglio; Al momento non posso chiamare log.WithConn(c).WithRequest(r).Error(...)
perché non posso aggiungere WithRequest()
a logrus.Entry
.)
fonte
2015-05-15 13:55:02
Grazie per una spiegazione ben dettagliata! In precedenza ho utilizzato anche i miei wrapper di log con altre lingue, ma molte volte li ho trovati non necessari e un sovraccarico. Penso che renderebbe la sostituzione del provider di registro più facile però. –