Skip to content

Commit 8c23952

Browse files
maksim.konovalovKaymeKaydex
maksim.konovalov
authored andcommitted
Moved slog logger implementation to providers/slog directory
1 parent 7c9553c commit 8c23952

File tree

7 files changed

+122
-90
lines changed

7 files changed

+122
-90
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
## Unreleased
22

3+
CHANGES:
4+
* Slog provider moved to providers directory.
5+
36
## v2.0.5
47

58
The go-vshard team apologizes for changing the interfaces to experimental status.

README.md

+5
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,11 @@ This will allow you not to think about options and metrics settings.
197197
The following providers are currently available:
198198
- **[prometheus](providers/prometheus)**
199199

200+
#### Logs
201+
202+
- stdout (builtin)
203+
- **[slog](providers/slog)**
204+
200205
### Learn more examples
201206
#### Quick Start
202207
Learn with th [Quick Start](docs/doc.md), which include examples and theory.

README_ru.md

+6
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,12 @@ func main() {
208208
На данный момент доступны следующие провайдеры:
209209
- **[prometheus](providers/prometheus)**
210210

211+
#### Логирование
212+
213+
- stdout (builtin)
214+
- **[slog](providers/slog)**
215+
216+
211217
### Ознакомьтесь с другими примерами
212218

213219
#### Быстрое начало

providers.go

-47
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ package vshard_router //nolint:revive
22

33
import (
44
"context"
5-
"fmt"
65
"log"
7-
"log/slog"
86
"time"
97
)
108

@@ -15,7 +13,6 @@ var (
1513
// Ensure StdoutLoggerf implements LogfProvider
1614
_ LogfProvider = StdoutLoggerf{}
1715
// Ensure SlogLoggerf implements LogfProvider
18-
_ LogfProvider = &SlogLoggerf{}
1916
)
2017

2118
// LogfProvider an interface to inject a custom logger.
@@ -87,50 +84,6 @@ func (s StdoutLoggerf) Errorf(_ context.Context, format string, v ...any) {
8784
s.printLevel(StdoutLogError, "[ERROR] ", format, v...)
8885
}
8986

90-
// NewSlogLogger wraps slog logger
91-
func NewSlogLogger(logger *slog.Logger) LogfProvider {
92-
return &SlogLoggerf{
93-
Logger: logger,
94-
}
95-
}
96-
97-
// SlogLoggerf is adapter for slog to Logger interface.
98-
type SlogLoggerf struct {
99-
Logger *slog.Logger
100-
}
101-
102-
// Debugf implements Debugf method for LogfProvider interface
103-
func (s *SlogLoggerf) Debugf(ctx context.Context, format string, v ...any) {
104-
if !s.Logger.Enabled(ctx, slog.LevelDebug) {
105-
return
106-
}
107-
s.Logger.DebugContext(ctx, fmt.Sprintf(format, v...))
108-
}
109-
110-
// Infof implements Infof method for LogfProvider interface
111-
func (s SlogLoggerf) Infof(ctx context.Context, format string, v ...any) {
112-
if !s.Logger.Enabled(ctx, slog.LevelInfo) {
113-
return
114-
}
115-
s.Logger.InfoContext(ctx, fmt.Sprintf(format, v...))
116-
}
117-
118-
// Warnf implements Warnf method for LogfProvider interface
119-
func (s SlogLoggerf) Warnf(ctx context.Context, format string, v ...any) {
120-
if !s.Logger.Enabled(ctx, slog.LevelWarn) {
121-
return
122-
}
123-
s.Logger.WarnContext(ctx, fmt.Sprintf(format, v...))
124-
}
125-
126-
// Errorf implements Errorf method for LogfProvider interface
127-
func (s SlogLoggerf) Errorf(ctx context.Context, format string, v ...any) {
128-
if !s.Logger.Enabled(ctx, slog.LevelError) {
129-
return
130-
}
131-
s.Logger.ErrorContext(ctx, fmt.Sprintf(format, v...))
132-
}
133-
13487
// Metrics
13588

13689
// MetricsProvider is an interface for passing library metrics to your prometheus/graphite and other metrics.

providers/slog/slog.go

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package slog
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log/slog"
7+
8+
vshardrouter "github.com/tarantool/go-vshard-router/v2"
9+
)
10+
11+
// Check that provider implements LogfProvider interface.
12+
var _ vshardrouter.LogfProvider = (*SlogLoggerf)(nil)
13+
14+
// NewSlogLogger wraps slog logger for go-vshard-router.
15+
func NewSlogLogger(logger *slog.Logger) *SlogLoggerf {
16+
return &SlogLoggerf{
17+
Logger: logger,
18+
}
19+
}
20+
21+
// SlogLoggerf is adapter for slog to Logger interface.
22+
type SlogLoggerf struct {
23+
Logger *slog.Logger
24+
}
25+
26+
// Debugf implements Debugf method for LogfProvider interface
27+
func (s *SlogLoggerf) Debugf(ctx context.Context, format string, v ...any) {
28+
if !s.Logger.Enabled(ctx, slog.LevelDebug) {
29+
return
30+
}
31+
s.Logger.DebugContext(ctx, fmt.Sprintf(format, v...))
32+
}
33+
34+
// Infof implements Infof method for LogfProvider interface
35+
func (s *SlogLoggerf) Infof(ctx context.Context, format string, v ...any) {
36+
if !s.Logger.Enabled(ctx, slog.LevelInfo) {
37+
return
38+
}
39+
s.Logger.InfoContext(ctx, fmt.Sprintf(format, v...))
40+
}
41+
42+
// Warnf implements Warnf method for LogfProvider interface
43+
func (s *SlogLoggerf) Warnf(ctx context.Context, format string, v ...any) {
44+
if !s.Logger.Enabled(ctx, slog.LevelWarn) {
45+
return
46+
}
47+
s.Logger.WarnContext(ctx, fmt.Sprintf(format, v...))
48+
}
49+
50+
// Errorf implements Errorf method for LogfProvider interface
51+
func (s *SlogLoggerf) Errorf(ctx context.Context, format string, v ...any) {
52+
if !s.Logger.Enabled(ctx, slog.LevelError) {
53+
return
54+
}
55+
s.Logger.ErrorContext(ctx, fmt.Sprintf(format, v...))
56+
}

providers/slog/slog_test.go

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package slog
2+
3+
import (
4+
"context"
5+
"log/slog"
6+
"os"
7+
"testing"
8+
9+
"github.com/stretchr/testify/require"
10+
vshardrouter "github.com/tarantool/go-vshard-router/v2"
11+
)
12+
13+
func TestNewSlogLogger(t *testing.T) {
14+
var slogProvider vshardrouter.LogfProvider
15+
16+
require.NotPanics(t, func() {
17+
slogProvider = NewSlogLogger(nil)
18+
})
19+
20+
require.Panics(t, func() {
21+
slogProvider.Warnf(context.TODO(), "")
22+
})
23+
}
24+
25+
func TestSlogProvider(t *testing.T) {
26+
ctx := context.Background()
27+
28+
// create new logger handler
29+
handler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
30+
Level: slog.LevelError,
31+
})
32+
// create new SLogger instance
33+
sLogger := slog.New(handler)
34+
35+
logProvider := NewSlogLogger(sLogger)
36+
37+
require.NotPanics(t, func() {
38+
logProvider.Infof(ctx, "test %s", "s")
39+
})
40+
41+
require.NotPanics(t, func() {
42+
logProvider.Warnf(ctx, "test %s", "s")
43+
})
44+
45+
require.NotPanics(t, func() {
46+
logProvider.Errorf(ctx, "test %s", "s")
47+
})
48+
49+
require.NotPanics(t, func() {
50+
logProvider.Debugf(ctx, "test %s", "s")
51+
})
52+
}

providers_test.go

-43
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package vshard_router_test
22

33
import (
44
"context"
5-
"log/slog"
6-
"os"
75
"testing"
86
"time"
97

@@ -51,44 +49,3 @@ func TestStdoutLogger(t *testing.T) {
5149
stdoutLogger.Debugf(ctx, "")
5250
})
5351
}
54-
55-
func TestNewSlogLogger(t *testing.T) {
56-
var slogProvider vshardrouter.LogfProvider
57-
58-
require.NotPanics(t, func() {
59-
slogProvider = vshardrouter.NewSlogLogger(nil)
60-
})
61-
62-
require.Panics(t, func() {
63-
slogProvider.Warnf(context.TODO(), "")
64-
})
65-
}
66-
67-
func TestSlogProvider(t *testing.T) {
68-
ctx := context.Background()
69-
70-
// create new logger handler
71-
handler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
72-
Level: slog.LevelError,
73-
})
74-
// create new SLogger instance
75-
sLogger := slog.New(handler)
76-
77-
logProvider := vshardrouter.NewSlogLogger(sLogger)
78-
79-
require.NotPanics(t, func() {
80-
logProvider.Infof(ctx, "test %s", "s")
81-
})
82-
83-
require.NotPanics(t, func() {
84-
logProvider.Warnf(ctx, "test %s", "s")
85-
})
86-
87-
require.NotPanics(t, func() {
88-
logProvider.Errorf(ctx, "test %s", "s")
89-
})
90-
91-
require.NotPanics(t, func() {
92-
logProvider.Debugf(ctx, "test %s", "s")
93-
})
94-
}

0 commit comments

Comments
 (0)