Я хотел бы регистрировать ошибки из net / http в моем собственном формате. В пакете net / http я нашел Сервер struct:
type Server struct {
//...
ErrorLog *log.Logger
}
Я бы хотел заменить регистратор своей собственной реализацией:
type AppLogger struct {
log *zap.SugaredLogger
}
func (l *AppLogger) Error(message string, keyAndValues ...interface{}) {
l.log.Errorw(message, keyAndValues...)
}
Как правильно это реализовать?
Обновление:
У меня есть zap logger со следующей конфигурацией:
cfg := zap.Config{
Encoding: encoding,
Level: zap.NewAtomicLevelAt(zap.DebugLevel),
OutputPaths: []string{"stdout"},
ErrorOutputPaths: []string{"stdout"},
EncoderConfig: encCfg,
}
logger, err := cfg.Build()
Он настроен на запись в формате json. Я хотел бы, чтобы ошибки из net/http
записывались так же, как и zap. Я создаю следующее:
type serverJsonWriter struct {
io.Writer
}
// ListenAndServeTLS - with custom log Writer
func ListenAndServeTLS(addr, certFile, keyFile string, handler http.Handler) error {
server := &http.Server{
Addr: addr,
Handler: handler,
ErrorLog: logger.New(serverJsonWriter{}, "", 0),
}
}
func (w serverJsonWriter) Write(p []byte) (n int, err error){
// {"error":{"type":"net/http error","message":"header too long"}}
}
Вопросы:
- Каким должно быть тело
serverJsonWriter
метода?
- Должен ли я получить
zap
io.Writer, чтобы передать его log.Logger
? Как это сделать?