1
0
mirror of https://github.com/labstack/echo.git synced 2025-01-26 03:20:08 +02:00

Add ability to set the logger on echo.Context (#1377)

This change allows middleware to replace the logger on the echo.Context
with a customized per-request logger with additional fields. The logger
is reset to default on every Reset() call.
This commit is contained in:
Alex Besogonov 2019-11-11 12:34:13 -08:00 committed by Vishal Rana
parent c50c67783f
commit 5c7c87d09e
2 changed files with 24 additions and 1 deletions

View File

@ -183,6 +183,9 @@ type (
// Logger returns the `Logger` instance. // Logger returns the `Logger` instance.
Logger() Logger Logger() Logger
// Set the logger
SetLogger(l Logger)
// Echo returns the `Echo` instance. // Echo returns the `Echo` instance.
Echo() *Echo Echo() *Echo
@ -202,6 +205,7 @@ type (
handler HandlerFunc handler HandlerFunc
store Map store Map
echo *Echo echo *Echo
logger Logger
lock sync.RWMutex lock sync.RWMutex
} }
) )
@ -598,9 +602,17 @@ func (c *context) SetHandler(h HandlerFunc) {
} }
func (c *context) Logger() Logger { func (c *context) Logger() Logger {
res := c.logger
if res != nil {
return res
}
return c.echo.Logger return c.echo.Logger
} }
func (c *context) SetLogger(l Logger) {
c.logger = l
}
func (c *context) Reset(r *http.Request, w http.ResponseWriter) { func (c *context) Reset(r *http.Request, w http.ResponseWriter) {
c.request = r c.request = r
c.response.reset(w) c.response.reset(w)
@ -609,6 +621,7 @@ func (c *context) Reset(r *http.Request, w http.ResponseWriter) {
c.store = nil c.store = nil
c.path = "" c.path = ""
c.pnames = nil c.pnames = nil
c.logger = nil
// NOTE: Don't reset because it has to have length c.echo.maxParam at all times // NOTE: Don't reset because it has to have length c.echo.maxParam at all times
for i := 0; i < *c.echo.maxParam; i++ { for i := 0; i < *c.echo.maxParam; i++ {
c.pvalues[i] = "" c.pvalues[i] = ""

View File

@ -7,6 +7,7 @@ import (
"encoding/xml" "encoding/xml"
"errors" "errors"
"fmt" "fmt"
"github.com/labstack/gommon/log"
"io" "io"
"math" "math"
"mime/multipart" "mime/multipart"
@ -800,7 +801,16 @@ func TestContext_Logger(t *testing.T) {
e := New() e := New()
c := e.NewContext(nil, nil) c := e.NewContext(nil, nil)
testify.NotNil(t, c.Logger()) log1 := c.Logger()
testify.NotNil(t, log1)
log2 := log.New("echo2")
c.SetLogger(log2)
testify.Equal(t, log2, c.Logger())
// Resetting the context returns the initial logger
c.Reset(nil, nil)
testify.Equal(t, log1, c.Logger())
} }
func TestContext_RealIP(t *testing.T) { func TestContext_RealIP(t *testing.T) {