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:
parent
c50c67783f
commit
5c7c87d09e
13
context.go
13
context.go
@ -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] = ""
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user