mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Logger: Add feature toggle for errors in HTTP request logs (#64425)
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user