mirror of
https://github.com/gofiber/fiber.git
synced 2025-02-22 04:13:21 +00:00
v3: fix logger benchmarks (#2074)
* v3: fix logger benchmarks * fix datarace * fix datarace * fix datarace
This commit is contained in:
parent
e3282f6408
commit
e9db6c70d2
@ -95,7 +95,7 @@ func main() {
|
|||||||
|
|
||||||
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
|
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
|
||||||
|
|
||||||
app.Use(logger.New(logger.Config{LoggerFunc: func(c fiber.Ctx, data logger.LoggerData, cfg logger.Config) error {
|
app.Use(logger.New(logger.Config{LoggerFunc: func(c fiber.Ctx, data *logger.LoggerData, cfg logger.Config) error {
|
||||||
log.Info().
|
log.Info().
|
||||||
Str("path", c.Path()).
|
Str("path", c.Path()).
|
||||||
Str("method", c.Method()).
|
Str("method", c.Method()).
|
||||||
@ -158,7 +158,7 @@ type Config struct {
|
|||||||
// If you don't define anything for this field, it'll use classical logger of Fiber.
|
// If you don't define anything for this field, it'll use classical logger of Fiber.
|
||||||
//
|
//
|
||||||
// Optional. Default: defaultLogger
|
// Optional. Default: defaultLogger
|
||||||
LoggerFunc func(c fiber.Ctx, data LoggerData, cfg Config) error
|
LoggerFunc func(c fiber.Ctx, data *LoggerData, cfg Config) error
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ type Config struct {
|
|||||||
// If you don't define anything for this field, it'll use default logger of Fiber.
|
// If you don't define anything for this field, it'll use default logger of Fiber.
|
||||||
//
|
//
|
||||||
// Optional. Default: defaultLogger
|
// Optional. Default: defaultLogger
|
||||||
LoggerFunc func(c fiber.Ctx, data LoggerData, cfg Config) error
|
LoggerFunc func(c fiber.Ctx, data *LoggerData, cfg Config) error
|
||||||
|
|
||||||
enableColors bool
|
enableColors bool
|
||||||
enableLatency bool
|
enableLatency bool
|
||||||
|
@ -19,6 +19,7 @@ import (
|
|||||||
|
|
||||||
// LoggerData is a struct to define some variables to use in custom logger function.
|
// LoggerData is a struct to define some variables to use in custom logger function.
|
||||||
type LoggerData struct {
|
type LoggerData struct {
|
||||||
|
mu sync.Mutex
|
||||||
Pid string
|
Pid string
|
||||||
ErrPaddingStr string
|
ErrPaddingStr string
|
||||||
ChainErr error
|
ChainErr error
|
||||||
@ -30,9 +31,7 @@ type LoggerData struct {
|
|||||||
var tmpl *fasttemplate.Template
|
var tmpl *fasttemplate.Template
|
||||||
|
|
||||||
// default logger for fiber
|
// default logger for fiber
|
||||||
func defaultLogger(c fiber.Ctx, data LoggerData, cfg Config) error {
|
func defaultLogger(c fiber.Ctx, data *LoggerData, cfg Config) error {
|
||||||
var mu sync.Mutex
|
|
||||||
|
|
||||||
// Alias colors
|
// Alias colors
|
||||||
colors := c.App().Config().ColorScheme
|
colors := c.App().Config().ColorScheme
|
||||||
|
|
||||||
@ -185,7 +184,7 @@ func defaultLogger(c fiber.Ctx, data LoggerData, cfg Config) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
_, _ = buf.WriteString(err.Error())
|
_, _ = buf.WriteString(err.Error())
|
||||||
}
|
}
|
||||||
mu.Lock()
|
data.mu.Lock()
|
||||||
// Write buffer to output
|
// Write buffer to output
|
||||||
if _, err := cfg.Output.Write(buf.Bytes()); err != nil {
|
if _, err := cfg.Output.Write(buf.Bytes()); err != nil {
|
||||||
// Write error to output
|
// Write error to output
|
||||||
@ -194,7 +193,7 @@ func defaultLogger(c fiber.Ctx, data LoggerData, cfg Config) error {
|
|||||||
fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err)
|
fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mu.Unlock()
|
data.mu.Unlock()
|
||||||
// Put buffer back to pool
|
// Put buffer back to pool
|
||||||
bytebufferpool.Put(buf)
|
bytebufferpool.Put(buf)
|
||||||
|
|
||||||
|
@ -88,6 +88,7 @@ func New(config ...Config) fiber.Handler {
|
|||||||
|
|
||||||
// Set variables
|
// Set variables
|
||||||
var (
|
var (
|
||||||
|
mu sync.Mutex
|
||||||
once sync.Once
|
once sync.Once
|
||||||
errHandler fiber.ErrorHandler
|
errHandler fiber.ErrorHandler
|
||||||
)
|
)
|
||||||
@ -99,6 +100,13 @@ func New(config ...Config) fiber.Handler {
|
|||||||
// Before handling func
|
// Before handling func
|
||||||
cfg.BeforeHandlerFunc(cfg)
|
cfg.BeforeHandlerFunc(cfg)
|
||||||
|
|
||||||
|
// Logger data
|
||||||
|
data := &LoggerData{
|
||||||
|
Pid: pid,
|
||||||
|
ErrPaddingStr: errPaddingStr,
|
||||||
|
Timestamp: timestamp,
|
||||||
|
}
|
||||||
|
|
||||||
// Return new handler
|
// Return new handler
|
||||||
return func(c fiber.Ctx) (err error) {
|
return func(c fiber.Ctx) (err error) {
|
||||||
// Don't execute middleware if Next returns true
|
// Don't execute middleware if Next returns true
|
||||||
@ -144,17 +152,16 @@ func New(config ...Config) fiber.Handler {
|
|||||||
stop = time.Now()
|
stop = time.Now()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logger instance
|
// Logger instance & update some logger data fields
|
||||||
if err = cfg.LoggerFunc(c, LoggerData{
|
mu.Lock()
|
||||||
Pid: pid,
|
data.ChainErr = chainErr
|
||||||
ErrPaddingStr: errPaddingStr,
|
data.Start = start
|
||||||
ChainErr: chainErr,
|
data.Stop = stop
|
||||||
Start: start,
|
|
||||||
Stop: stop,
|
if err = cfg.LoggerFunc(c, data, cfg); err != nil {
|
||||||
Timestamp: timestamp,
|
|
||||||
}, cfg); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
mu.Unlock()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user