|
4 | 4 | "errors" |
5 | 5 | "expvar" |
6 | 6 | "fmt" |
| 7 | + "go.uber.org/zap/zapcore" |
7 | 8 | "net" |
8 | 9 | "net/http" |
9 | 10 | "os" |
@@ -383,24 +384,27 @@ func setUpConfig(app *App, logger *zap.Logger) { |
383 | 384 |
|
384 | 385 | } |
385 | 386 |
|
386 | | -func (app *App) deferredAccessLogging(accessLogger *zap.Logger, r *http.Request, accessLogDetails *carbonapipb.AccessLogDetails, t time.Time, logAsError bool) { |
| 387 | +func (app *App) deferredAccessLogging(accessLogger *zap.Logger, r *http.Request, accessLogDetails *carbonapipb.AccessLogDetails, t time.Time, level zapcore.Level) { |
387 | 388 | accessLogDetails.Runtime = time.Since(t).Seconds() |
388 | 389 | accessLogDetails.RequestMethod = r.Method |
389 | 390 |
|
390 | 391 | fields, err := accessLogDetails.GetLogFields() |
391 | 392 | if err != nil { |
392 | 393 | accessLogger.Error("could not marshal access log details", zap.Error(err)) |
393 | 394 | } |
394 | | - |
395 | | - // TODO (grzkv) This logic is not obvious for the user |
396 | | - if logAsError { |
397 | | - accessLogger.Error("request failed", fields...) |
398 | | - apiMetrics.Errors.Add(1) |
399 | | - } else { |
400 | | - // TODO (grzkv) The code can differ from the real one. Clean up |
401 | | - // accessLogDetails.HttpCode = http.StatusOK |
402 | | - accessLogger.Info("request served", fields...) |
| 395 | + var logMsg string |
| 396 | + if accessLogDetails.HttpCode/100 < 4 { |
| 397 | + logMsg = "request served" |
| 398 | + apiMetrics.Responses.Add(1) |
| 399 | + } else if accessLogDetails.HttpCode/100 == 4 { |
| 400 | + logMsg = "request failed with client error" |
403 | 401 | apiMetrics.Responses.Add(1) |
| 402 | + } else { |
| 403 | + logMsg = "request failed with server error" |
| 404 | + apiMetrics.Errors.Add(1) |
| 405 | + } |
| 406 | + if ce := accessLogger.Check(level, logMsg); ce != nil { |
| 407 | + ce.Write(fields...) |
404 | 408 | } |
405 | 409 |
|
406 | 410 | if app != nil { |
|
0 commit comments