Benutzerdefinierte Protokollierung für net/http mit Zap
Das Protokollieren von Fehlern von net/http in einem benutzerdefinierten Format erfordert die Implementierung eines eigenen Protokollierungsmechanismus. Das net/http-Paket stellt eine Serverstruktur bereit, die ein ErrorLog-Feld enthält, mit dem Sie einen benutzerdefinierten Logger angeben können.
Implementieren eines benutzerdefinierten Loggers
Um den Standard-Logger zu ersetzen , erstellen Sie eine benutzerdefinierte Implementierung:
type AppLogger struct { log *zap.SugaredLogger } func (l *AppLogger) Error(message string, keyAndValues ...interface{}) { l.log.Errorw(message, keyAndValues...) }
Integration mit net/http
Erstellen Sie einen Typ, der io.Writer implementiert und an Ihren benutzerdefinierten Logger delegiert:
type serverJsonWriter struct { *zap.Logger } func (w serverJsonWriter) Write(p []byte) (n int, err error) { w.Error(string(p)) return len(p), nil }
Instanziieren Sie abschließend einen neuen http.Server und setzen Sie das Feld ErrorLog auf Ihr benutzerdefinierter Autor:
server := &http.Server{ Addr: addr, Handler: handler, ErrorLog: logger.New(&serverJsonWriter{l}, "", 0), }
wobei l Ihr Zap-Logger ist Instanz.
Zap io.Writer abrufen
Sie können den Zap io.Writer abrufen, indem Sie logger.Writer() auf der Logger-Instanz aufrufen:
zapWriter := logger.Writer()
Zusätzlich Hinweise
Das obige ist der detaillierte Inhalt vonWie kann ich mit Zap eine benutzerdefinierte Protokollierung für Netz-/http-Fehler implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!