1
0
mirror of https://github.com/gofiber/fiber.git synced 2025-02-21 04:33:03 +00:00

v3: fix logger benchmarks (#2074)

* v3: fix logger benchmarks

* fix datarace

* fix datarace

* fix datarace
This commit is contained in:
M. Efe Çetin 2022-09-06 18:54:39 +03:00 committed by GitHub
parent e3282f6408
commit e9db6c70d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 17 deletions

View File

@ -95,7 +95,7 @@ func main() {
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().
Str("path", c.Path()).
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.
//
// Optional. Default: defaultLogger
LoggerFunc func(c fiber.Ctx, data LoggerData, cfg Config) error
LoggerFunc func(c fiber.Ctx, data *LoggerData, cfg Config) error
}
```

View File

@ -51,7 +51,7 @@ type Config struct {
// If you don't define anything for this field, it'll use default logger of Fiber.
//
// 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
enableLatency bool

View File

@ -19,6 +19,7 @@ import (
// LoggerData is a struct to define some variables to use in custom logger function.
type LoggerData struct {
mu sync.Mutex
Pid string
ErrPaddingStr string
ChainErr error
@ -30,9 +31,7 @@ type LoggerData struct {
var tmpl *fasttemplate.Template
// default logger for fiber
func defaultLogger(c fiber.Ctx, data LoggerData, cfg Config) error {
var mu sync.Mutex
func defaultLogger(c fiber.Ctx, data *LoggerData, cfg Config) error {
// Alias colors
colors := c.App().Config().ColorScheme
@ -185,7 +184,7 @@ func defaultLogger(c fiber.Ctx, data LoggerData, cfg Config) error {
if err != nil {
_, _ = buf.WriteString(err.Error())
}
mu.Lock()
data.mu.Lock()
// Write buffer to output
if _, err := cfg.Output.Write(buf.Bytes()); err != nil {
// 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)
}
}
mu.Unlock()
data.mu.Unlock()
// Put buffer back to pool
bytebufferpool.Put(buf)

View File

@ -88,6 +88,7 @@ func New(config ...Config) fiber.Handler {
// Set variables
var (
mu sync.Mutex
once sync.Once
errHandler fiber.ErrorHandler
)
@ -99,6 +100,13 @@ func New(config ...Config) fiber.Handler {
// Before handling func
cfg.BeforeHandlerFunc(cfg)
// Logger data
data := &LoggerData{
Pid: pid,
ErrPaddingStr: errPaddingStr,
Timestamp: timestamp,
}
// Return new handler
return func(c fiber.Ctx) (err error) {
// Don't execute middleware if Next returns true
@ -144,17 +152,16 @@ func New(config ...Config) fiber.Handler {
stop = time.Now()
}
// Logger instance
if err = cfg.LoggerFunc(c, LoggerData{
Pid: pid,
ErrPaddingStr: errPaddingStr,
ChainErr: chainErr,
Start: start,
Stop: stop,
Timestamp: timestamp,
}, cfg); err != nil {
// Logger instance & update some logger data fields
mu.Lock()
data.ChainErr = chainErr
data.Start = start
data.Stop = stop
if err = cfg.LoggerFunc(c, data, cfg); err != nil {
return err
}
mu.Unlock()
return nil
}