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

View File

@ -7,6 +7,7 @@ import (
"encoding/xml"
"errors"
"fmt"
"github.com/labstack/gommon/log"
"io"
"math"
"mime/multipart"
@ -800,7 +801,16 @@ func TestContext_Logger(t *testing.T) {
e := New()
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) {