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