Skip to content

Commit 93b4eef

Browse files
committed
[logrus] Accept also *logrus.Logger in logrus adapter
So far, only *logrus.Entry was accepted. But sometimes end user would prefer to pass *logrus.Logger directly. This commit also renames Adapter.Entry field to Adapter.Logger.
1 parent 85b18b7 commit 93b4eef

File tree

4 files changed

+23
-17
lines changed

4 files changed

+23
-17
lines changed

adapter/logrusadapter/_example/main.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ var ErrSome = errors.New("some error")
1515
func main() {
1616
ctx := context.Background()
1717

18-
// First create a logrus logger entry. This is basically a Logger with some optional fields.
19-
entry := newLogrusEntry()
20-
// Then create a logger.Adapter
18+
// First create a logrus logger.
19+
l := newLogrusLogger()
20+
// Then create a logger.Adapter.
2121
adapter := logrusadapter.Adapter{
22-
Entry: entry, // inject logrus
22+
Logger: l, // you can also pass *logrus.Entry
2323
}
2424
// Create yala logger
2525
log := logger.WithAdapter(adapter)
@@ -30,11 +30,11 @@ func main() {
3030
log.WithError(ErrSome).Error(ctx, "Some error")
3131
}
3232

33-
func newLogrusEntry() *logrus.Entry {
33+
func newLogrusLogger() *logrus.Logger {
3434
l := logrus.New()
3535
l.SetLevel(logrus.DebugLevel)
3636
l.SetFormatter(&logrus.TextFormatter{
3737
ForceColors: true,
3838
})
39-
return logrus.NewEntry(l)
39+
return l
4040
}

adapter/logrusadapter/logrus.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,33 @@ import (
1313

1414
// Adapter is a logger.Adapter implementation, which is using `logrus` module (https://github.com/sirupsen/logrus).
1515
type Adapter struct {
16-
Entry *logrus.Entry
16+
Logger LogrusLogger
17+
}
18+
19+
// LogrusLogger is either *logrus.Logger or *logrus.Entry.
20+
type LogrusLogger interface {
21+
WithField(key string, value interface{}) *logrus.Entry
22+
WithError(err error) *logrus.Entry
23+
Log(lvl logrus.Level, args ...interface{})
1724
}
1825

1926
// Log logs the entry using logrus module.
2027
func (a Adapter) Log(ctx context.Context, entry logger.Entry) {
21-
if a.Entry == nil {
28+
if a.Logger == nil {
2229
return
2330
}
2431

25-
logrusEntry := a.Entry
32+
logrusLogger := a.Logger
2633

2734
for _, f := range entry.Fields {
28-
logrusEntry = logrusEntry.WithField(f.Key, f.Value)
35+
logrusLogger = logrusLogger.WithField(f.Key, f.Value)
2936
}
3037

3138
if entry.Error != nil {
32-
logrusEntry = logrusEntry.WithError(entry.Error)
39+
logrusLogger = logrusLogger.WithError(entry.Error)
3340
}
3441

35-
logrusEntry.Log(logrusLevel(entry), entry.Message)
42+
logrusLogger.Log(logrusLevel(entry), entry.Message)
3643
}
3744

3845
func logrusLevel(entry logger.Entry) logrus.Level {

adapter/logrusadapter/logrus_bench_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@ import (
1414
func BenchmarkLogrus(b *testing.B) {
1515
l := logrus.New()
1616
l.SetOutput(benchmark.DiscardWriter{})
17-
logrusEntry := logrus.NewEntry(l)
1817

19-
adapter := logrusadapter.Adapter{Entry: logrusEntry}
18+
adapter := logrusadapter.Adapter{Logger: l}
2019

2120
benchmark.Adapter(b, adapter)
2221
}

adapter/logrusadapter/logrus_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ const message = "message"
2323
func TestAdapter_Log(t *testing.T) {
2424
ctx := context.Background()
2525

26-
t.Run("should not panic when entry is nil", func(t *testing.T) {
27-
adapter := logrusadapter.Adapter{Entry: nil}
26+
t.Run("should not panic when logger is nil", func(t *testing.T) {
27+
adapter := logrusadapter.Adapter{Logger: nil}
2828
assert.NotPanics(t, func() {
2929
adapter.Log(ctx, logger.Entry{
3030
Level: logger.InfoLevel,
@@ -45,7 +45,7 @@ func newAdapter(writer io.Writer) logger.Adapter { // nolint
4545
logrusLogger.SetOutput(writer)
4646
logrusLogger.SetLevel(logrus.DebugLevel)
4747

48-
return logrusadapter.Adapter{Entry: logrus.NewEntry(logrusLogger)}
48+
return logrusadapter.Adapter{Logger: logrusLogger}
4949
}
5050

5151
var levelMapping = map[string]logger.Level{

0 commit comments

Comments
 (0)