/
logger.go
56 lines (45 loc) 路 1.07 KB
/
logger.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package logger
import (
"context"
"fmt"
"io"
"github.com/mgjules/spoty/config"
"github.com/uptrace/opentelemetry-go-extra/otelzap"
"go.uber.org/fx"
"go.uber.org/zap"
)
// Module exported for initialising a new Logger.
var Module = fx.Options(
fx.Provide(New),
)
// Logger is a simple wrapper around zap.SugaredLogger.
type Logger struct {
*otelzap.SugaredLogger
}
// New creates a new Logger.
func New(lc fx.Lifecycle, cfg *config.Config) (*Logger, error) {
var (
logger *zap.Logger
err error
)
if cfg.Prod {
logger, err = zap.NewProduction()
} else {
logger, err = zap.NewDevelopment()
}
if err != nil {
return nil, fmt.Errorf("failed to create logger: %w", err)
}
lc.Append(fx.Hook{
OnStop: func(_ context.Context) error {
logger.Sync() //nolint:errcheck,gosec // see:https://github.com/uber-go/zap/issues/328
return nil
},
})
otellogger := otelzap.New(logger)
return &Logger{otellogger.Sugar()}, nil
}
// Writer returns the logger's io.Writer.
func (l *Logger) Writer() io.Writer {
return zap.NewStdLog(l.Desugar().Logger).Writer()
}