Skip to content

Commit 15a2271

Browse files
committed
refactor(config)!: now rolling config is registered sync
1 parent 1643880 commit 15a2271

File tree

4 files changed

+46
-77
lines changed

4 files changed

+46
-77
lines changed

config.go

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ type Config struct {
3434
// logs, see the package-level AdvancedConfiguration example.
3535
ErrorOutput []string `json:"errorOutput,omitempty" yaml:"errorOutput,omitempty"`
3636

37-
// File logger options
38-
FileLogger *FileLoggerConfig `json:"fileLogger,omitempty" yaml:"fileLogger,omitempty"`
37+
// RollingLogger rolling logger options
38+
RollingLogger *RollingLoggerConfig `json:"rollingLogger,omitempty" yaml:"rollingLogger,omitempty"`
3939
}
4040

4141
func (cfg *Config) setDefaults() {
@@ -55,23 +55,12 @@ func (cfg *Config) setDefaults() {
5555
if cfg.Encoding == "" {
5656
cfg.Encoding = "json"
5757
}
58-
if len(cfg.Output) == 0 {
59-
cfg.Output = []string{"stderr"}
60-
}
61-
if len(cfg.ErrorOutput) == 0 {
62-
cfg.ErrorOutput = []string{"stderr"}
63-
}
64-
if cfg.FileLogger != nil {
65-
cfg.FileLogger.setDefaults()
58+
if cfg.RollingLogger != nil {
59+
cfg.RollingLogger.setDefaults()
6660
}
6761
}
6862

69-
type FileLoggerConfig struct {
70-
// Filename is the file to write logs to. Backup log files will be retained
71-
// in the same directory. It uses <processname>-lumberjack.log in
72-
// os.TempDir() if empty.
73-
Filename string `json:"filename,omitempty" yaml:"filename,omitempty"`
74-
63+
type RollingLoggerConfig struct {
7564
// MaxSize is the maximum size in megabytes of the log file before it gets
7665
// rotated. It defaults to 100 megabytes.
7766
MaxSize int `json:"maxSize,omitempty" yaml:"maxSize,omitempty"`
@@ -98,7 +87,7 @@ type FileLoggerConfig struct {
9887
Compress bool `json:"compress,omitempty" yaml:"compress,omitempty"`
9988
}
10089

101-
func (cfg *FileLoggerConfig) setDefaults() {
90+
func (cfg *RollingLoggerConfig) setDefaults() {
10291
if cfg.MaxSize == 0 {
10392
cfg.MaxSize = 100
10493
}

go.mod

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,14 @@ go 1.23.2
44

55
require (
66
github.com/fatih/color v1.18.0
7-
github.com/samber/slog-zap/v2 v2.6.0
87
go.uber.org/zap v1.27.0
8+
go.uber.org/zap/exp v0.3.0
99
gopkg.in/natefinch/lumberjack.v2 v2.2.1
1010
)
1111

1212
require (
1313
github.com/mattn/go-colorable v0.1.13 // indirect
1414
github.com/mattn/go-isatty v0.0.20 // indirect
15-
github.com/samber/lo v1.47.0 // indirect
16-
github.com/samber/slog-common v0.17.1 // indirect
1715
go.uber.org/multierr v1.11.0 // indirect
18-
golang.org/x/sys v0.26.0 // indirect
19-
golang.org/x/text v0.19.0 // indirect
16+
golang.org/x/sys v0.27.0 // indirect
2017
)

go.sum

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,6 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
99
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
1010
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1111
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
12-
github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc=
13-
github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU=
14-
github.com/samber/slog-common v0.17.1 h1:jTqqLBgoJshpoxlPSGiypyOanjH6tY+i9bwyYmIbjhI=
15-
github.com/samber/slog-common v0.17.1/go.mod h1:mZSJhinB4aqHziR0SKPqpVZjJ0JO35JfH+dDIWqaCBk=
16-
github.com/samber/slog-zap/v2 v2.6.0 h1:o6fGsDTlAigThoFAy1EY+n8ADF2oNylssYP04ZTmKxs=
17-
github.com/samber/slog-zap/v2 v2.6.0/go.mod h1:ZsV2GDRCClGlNz02UaDkqnxQlQoRWCupHhrhxBc0paQ=
1812
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
1913
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
2014
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -23,12 +17,12 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
2317
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
2418
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
2519
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
20+
go.uber.org/zap/exp v0.3.0 h1:6JYzdifzYkGmTdRR59oYH+Ng7k49H9qVpWwNSsGJj3U=
21+
go.uber.org/zap/exp v0.3.0/go.mod h1:5I384qq7XGxYyByIhHm6jg5CHkGY0nsTfbDLgDDlgJQ=
2622
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
2723
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
28-
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
29-
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
30-
golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
31-
golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
24+
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
25+
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
3226
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
3327
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
3428
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

logger.go

Lines changed: 34 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,29 @@
11
package logwise
22

33
import (
4-
"context"
54
"log/slog"
5+
"net/url"
66
"time"
77

8-
slogzap "github.com/samber/slog-zap/v2"
98
"go.uber.org/zap"
9+
"go.uber.org/zap/exp/zapslog"
1010
"go.uber.org/zap/zapcore"
1111
"gopkg.in/natefinch/lumberjack.v2"
1212
)
1313

14-
// Discard is a [Handler] which is always disabled and therefore logs nothing.
15-
var Discard slog.Handler = discardHandler{}
16-
17-
var LogLevels = map[zapcore.Level]slog.Level{
18-
zapcore.DebugLevel: slog.LevelDebug,
19-
zapcore.InfoLevel: slog.LevelInfo,
20-
zapcore.WarnLevel: slog.LevelWarn,
21-
zapcore.ErrorLevel: slog.LevelError,
22-
zapcore.DPanicLevel: slog.LevelError,
23-
zapcore.PanicLevel: slog.LevelError,
24-
zapcore.FatalLevel: slog.LevelError,
25-
}
26-
27-
func NewSlog(logger *zap.Logger) *slog.Logger {
28-
option := slogzap.Option{
29-
Level: LogLevels[logger.Level()],
30-
Logger: logger.WithOptions(zap.AddCallerSkip(1)),
31-
}
32-
return slog.New(option.NewZapHandler())
14+
func NewSlog(logger zapcore.Core) *slog.Logger {
15+
return slog.New(zapslog.NewHandler(logger, zapslog.WithCallerSkip(1)))
3316
}
3417

3518
func NewZap(cfg Config) (*zap.Logger, error) {
3619
cfg.setDefaults()
3720

21+
if cfg.RollingLogger != nil {
22+
if err := zap.RegisterSink("rolling", syncFactory(*cfg.RollingLogger)); err != nil {
23+
return nil, err
24+
}
25+
}
26+
3827
var zCfg zap.Config
3928
switch cfg.Mode {
4029
case off, none:
@@ -119,25 +108,32 @@ func NewZap(cfg Config) (*zap.Logger, error) {
119108
}
120109
}
121110

122-
if cfg.FileLogger != nil {
123-
w := zapcore.AddSync(&lumberjack.Logger{
124-
Filename: cfg.FileLogger.Filename,
125-
MaxSize: cfg.FileLogger.MaxSize,
126-
MaxAge: cfg.FileLogger.MaxAge,
127-
MaxBackups: cfg.FileLogger.MaxBackups,
128-
LocalTime: cfg.FileLogger.LocalTime,
129-
Compress: cfg.FileLogger.Compress,
130-
})
111+
return zCfg.Build()
112+
}
113+
114+
type sync struct {
115+
*lumberjack.Logger
116+
}
131117

132-
core := zapcore.NewCore(
133-
zapcore.NewJSONEncoder(zCfg.EncoderConfig),
134-
w,
135-
zCfg.Level,
136-
)
137-
return zap.New(core), nil
138-
}
118+
func (*sync) Sync() error {
119+
return nil
120+
}
139121

140-
return zCfg.Build()
122+
func syncFactory(cfg RollingLoggerConfig) func(*url.URL) (zap.Sink, error) {
123+
return func(u *url.URL) (zap.Sink, error) {
124+
filename := u.Path
125+
if u.Host == "." || u.Path == "" {
126+
filename = u.Host + u.Path
127+
}
128+
return &sync{&lumberjack.Logger{
129+
Filename: filename,
130+
MaxSize: cfg.MaxSize,
131+
MaxAge: cfg.MaxAge,
132+
MaxBackups: cfg.MaxBackups,
133+
LocalTime: cfg.LocalTime,
134+
Compress: cfg.Compress,
135+
}}, nil
136+
}
141137
}
142138

143139
func level(lvl string) zap.AtomicLevel {
@@ -153,10 +149,3 @@ func utcISO8601TimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
153149
func utcEpochTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
154150
enc.AppendInt64(t.UTC().UnixNano())
155151
}
156-
157-
type discardHandler struct{}
158-
159-
func (discardHandler) Enabled(context.Context, slog.Level) bool { return false }
160-
func (discardHandler) Handle(context.Context, slog.Record) error { return nil }
161-
func (d discardHandler) WithAttrs([]slog.Attr) slog.Handler { return d }
162-
func (d discardHandler) WithGroup(string) slog.Handler { return d }

0 commit comments

Comments
 (0)