mirror of
https://github.com/caddyserver/caddy.git
synced 2025-05-28 22:55:50 +08:00
caddyhttp: Support multiple logger names per host (#6088)
* caddyhttp: Support multiple logger names per host * Lint * Add adapt test * Implement "string or array" parsing, keep original `logger_names` * Rewrite adapter test to be more representative of the usecase
This commit is contained in:
@ -361,11 +361,11 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
cloneURL(origReq.URL, r.URL)
|
||||
|
||||
// prepare the error log
|
||||
logger := errLog
|
||||
errLog = errLog.With(zap.Duration("duration", duration))
|
||||
errLoggers := []*zap.Logger{errLog}
|
||||
if s.Logs != nil {
|
||||
logger = s.Logs.wrapLogger(logger, r.Host)
|
||||
errLoggers = s.Logs.wrapLogger(errLog, r.Host)
|
||||
}
|
||||
logger = logger.With(zap.Duration("duration", duration))
|
||||
|
||||
// get the values that will be used to log the error
|
||||
errStatus, errMsg, errFields := errLogValues(err)
|
||||
@ -379,7 +379,9 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
if err2 == nil {
|
||||
// user's error route handled the error response
|
||||
// successfully, so now just log the error
|
||||
logger.Debug(errMsg, errFields...)
|
||||
for _, logger := range errLoggers {
|
||||
logger.Debug(errMsg, errFields...)
|
||||
}
|
||||
} else {
|
||||
// well... this is awkward
|
||||
errFields = append([]zapcore.Field{
|
||||
@ -387,7 +389,9 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
zap.Namespace("first_error"),
|
||||
zap.String("msg", errMsg),
|
||||
}, errFields...)
|
||||
logger.Error("error handling handler error", errFields...)
|
||||
for _, logger := range errLoggers {
|
||||
logger.Error("error handling handler error", errFields...)
|
||||
}
|
||||
if handlerErr, ok := err.(HandlerError); ok {
|
||||
w.WriteHeader(handlerErr.StatusCode)
|
||||
} else {
|
||||
@ -395,10 +399,12 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if errStatus >= 500 {
|
||||
logger.Error(errMsg, errFields...)
|
||||
} else {
|
||||
logger.Debug(errMsg, errFields...)
|
||||
for _, logger := range errLoggers {
|
||||
if errStatus >= 500 {
|
||||
logger.Error(errMsg, errFields...)
|
||||
} else {
|
||||
logger.Debug(errMsg, errFields...)
|
||||
}
|
||||
}
|
||||
w.WriteHeader(errStatus)
|
||||
}
|
||||
@ -735,16 +741,6 @@ func (s *Server) logRequest(
|
||||
repl.Set("http.response.duration", duration)
|
||||
repl.Set("http.response.duration_ms", duration.Seconds()*1e3) // multiply seconds to preserve decimal (see #4666)
|
||||
|
||||
logger := accLog
|
||||
if s.Logs != nil {
|
||||
logger = s.Logs.wrapLogger(logger, r.Host)
|
||||
}
|
||||
|
||||
log := logger.Info
|
||||
if wrec.Status() >= 400 {
|
||||
log = logger.Error
|
||||
}
|
||||
|
||||
userID, _ := repl.GetString("http.auth.user.id")
|
||||
|
||||
reqBodyLength := 0
|
||||
@ -768,7 +764,20 @@ func (s *Server) logRequest(
|
||||
}))
|
||||
fields = append(fields, extra.fields...)
|
||||
|
||||
log("handled request", fields...)
|
||||
loggers := []*zap.Logger{accLog}
|
||||
if s.Logs != nil {
|
||||
loggers = s.Logs.wrapLogger(accLog, r.Host)
|
||||
}
|
||||
|
||||
// wrapping may return multiple loggers, so we log to all of them
|
||||
for _, logger := range loggers {
|
||||
logAtLevel := logger.Info
|
||||
if wrec.Status() >= 400 {
|
||||
logAtLevel = logger.Error
|
||||
}
|
||||
|
||||
logAtLevel("handled request", fields...)
|
||||
}
|
||||
}
|
||||
|
||||
// protocol returns true if the protocol proto is configured/enabled.
|
||||
|
Reference in New Issue
Block a user