Logger: Add feature toggle for errors in HTTP request logs (#64425)

This commit is contained in:
Emil Tullstedt
2023-03-31 15:38:09 +02:00
committed by GitHub
parent 977a7e9a55
commit be9361cb9e
19 changed files with 488 additions and 199 deletions

View File

@@ -80,21 +80,11 @@ func (r *NormalResponse) ErrMessage() string {
func (r *NormalResponse) WriteTo(ctx *contextmodel.ReqContext) {
if r.err != nil {
v := map[string]interface{}{}
traceID := tracing.TraceIDFromContext(ctx.Req.Context(), false)
if err := json.Unmarshal(r.body.Bytes(), &v); err == nil {
v["traceID"] = traceID
if b, err := json.Marshal(v); err == nil {
r.body = bytes.NewBuffer(b)
}
if errutil.HasUnifiedLogging(ctx.Req.Context()) {
ctx.Error = r.err
} else {
r.writeLogLine(ctx)
}
logger := ctx.Logger.Error
var gfErr *errutil.Error
if errors.As(r.err, &gfErr) {
logger = gfErr.LogLevel.LogFunc(ctx.Logger)
}
logger(r.errMessage, "error", r.err, "remote_addr", ctx.RemoteAddr(), "traceID", traceID)
}
header := ctx.Resp.Header()
@@ -107,6 +97,24 @@ func (r *NormalResponse) WriteTo(ctx *contextmodel.ReqContext) {
}
}
func (r *NormalResponse) writeLogLine(c *contextmodel.ReqContext) {
v := map[string]interface{}{}
traceID := tracing.TraceIDFromContext(c.Req.Context(), false)
if err := json.Unmarshal(r.body.Bytes(), &v); err == nil {
v["traceID"] = traceID
if b, err := json.Marshal(v); err == nil {
r.body = bytes.NewBuffer(b)
}
}
logger := c.Logger.Error
var gfErr errutil.Error
if errors.As(r.err, &gfErr) {
logger = gfErr.LogLevel.LogFunc(c.Logger)
}
logger(r.errMessage, "error", r.err, "remote_addr", c.RemoteAddr(), "traceID", traceID)
}
func (r *NormalResponse) SetHeader(key, value string) *NormalResponse {
r.header.Set(key, value)
return r
@@ -253,8 +261,8 @@ func Error(status int, message string, err error) *NormalResponse {
// Err creates an error response based on an errutil.Error error.
func Err(err error) *NormalResponse {
grafanaErr := &errutil.Error{}
if !errors.As(err, grafanaErr) {
grafanaErr := errutil.Error{}
if !errors.As(err, &grafanaErr) {
return Error(http.StatusInternalServerError, "", fmt.Errorf("unexpected error type [%s]: %w", reflect.TypeOf(err), err))
}
@@ -273,8 +281,8 @@ func Err(err error) *NormalResponse {
// rename this to Error when we're confident that that would be safe to
// do.
func ErrOrFallback(status int, message string, err error) *NormalResponse {
grafanaErr := &errutil.Error{}
if errors.As(err, grafanaErr) {
grafanaErr := errutil.Error{}
if errors.As(err, &grafanaErr) {
return Err(err)
}