Skip to content

Commit 2b30b94

Browse files
author
Arun Gopalpuri
committed
global logger
1 parent 1910d85 commit 2b30b94

File tree

5 files changed

+65
-17
lines changed

5 files changed

+65
-17
lines changed

README.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ func main() {
3535
logrusLog.SetOutput(os.Stdout)
3636
logrusLog.SetLevel(logrus.DebugLevel)
3737
log, _ := logger.NewLogrusLogger(logrusLog)
38-
log.WithFields(logger.Fields{
38+
logger.ReplaceGlobals(log)
39+
//anywhere in your code you can now use logger.L() as its globally set
40+
logger.L().WithFields(logger.Fields{
3941
"foo": "bar",
4042
}).Info("direct")
4143
}
@@ -61,9 +63,10 @@ func main() {
6163
zapcore.DebugLevel)
6264
zapLogger := zap.New(core)
6365
log, _ := logger.NewZapLogger(zapLogger)
64-
log.WithFields(logger.Fields{
66+
logger.ReplaceGlobals(log)
67+
//anywhere in your code you can now use logger.L() as its globally set
68+
logger.L().WithFields(logger.Fields{
6569
"foo": "bar",
6670
}).Info("direct")
6771
}
68-
6972
```

pkg/logger/global.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package logger
2+
3+
import (
4+
"sync"
5+
)
6+
7+
var (
8+
_globalMU sync.RWMutex
9+
_globalL Logger
10+
)
11+
12+
// ReplaceGlobals replaces the global Logger and returns a
13+
// function to restore the original values. It's safe for concurrent use.
14+
func ReplaceGlobals(logger Logger) func() {
15+
_globalMU.Lock()
16+
prev := _globalL
17+
_globalL = logger
18+
_globalMU.Unlock()
19+
return func() { ReplaceGlobals(prev) }
20+
}
21+
22+
// L returns the global Logger, which can be reconfigured with ReplaceGlobals.
23+
// It's safe for concurrent use.
24+
func L() Logger {
25+
_globalMU.RLock()
26+
l := _globalL
27+
_globalMU.RUnlock()
28+
return l
29+
}

pkg/logger/logger.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package logger
33
//Fields Type to pass when we want to call WithFields for structured logging
44
type Fields map[string]interface{}
55

6+
var logger Logger
7+
68
//Logger is our contract for the logger
79
type Logger interface {
810
// Debug uses fmt.Sprint to construct and log a message.

pkg/logger/logrus_test.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ func TestLogrusInfoLogger(t *testing.T) {
1717
logrus.SetOutput(&buffer)
1818
logrus.SetLevel(log.DebugLevel)
1919
absLogger, _ := NewLogrusLogger(logrus)
20-
absLogger.WithFields(Fields{
20+
ReplaceGlobals(absLogger)
21+
L().WithFields(Fields{
2122
"foo": "bar",
2223
}).Info("direct")
2324

@@ -36,7 +37,8 @@ func TestLogrusInfofLogger(t *testing.T) {
3637
logrus.SetOutput(&buffer)
3738
logrus.SetLevel(log.DebugLevel)
3839
absLogger, _ := NewLogrusLogger(logrus)
39-
absLogger.WithFields(Fields{
40+
ReplaceGlobals(absLogger)
41+
L().WithFields(Fields{
4042
"ping": "pong",
4143
}).Infof("received %s balls", "ping pong")
4244

@@ -55,7 +57,8 @@ func TestLogrusWarnLogger(t *testing.T) {
5557
logrus.SetOutput(&buffer)
5658
logrus.SetLevel(log.DebugLevel)
5759
absLogger, _ := NewLogrusLogger(logrus)
58-
absLogger.WithFields(Fields{
60+
ReplaceGlobals(absLogger)
61+
L().WithFields(Fields{
5962
"foo": "bar",
6063
"log": "logrus",
6164
}).Warn("direct")
@@ -76,7 +79,8 @@ func TestLogrusWarnfLogger(t *testing.T) {
7679
logrus.SetOutput(&buffer)
7780
logrus.SetLevel(log.DebugLevel)
7881
absLogger, _ := NewLogrusLogger(logrus)
79-
absLogger.WithFields(Fields{
82+
ReplaceGlobals(absLogger)
83+
L().WithFields(Fields{
8084
"ping": "pong",
8185
"log": "logrus",
8286
}).Warnf("received %s balls", "table tennis")
@@ -97,6 +101,7 @@ func TestLogrusPanicLogger(t *testing.T) {
97101
logrus.SetOutput(&buffer)
98102
logrus.SetLevel(log.ErrorLevel)
99103
absLogger, _ := NewLogrusLogger(logrus)
104+
ReplaceGlobals(absLogger)
100105
defer func() {
101106
if r := recover(); r == nil {
102107
t.Errorf("The code did not panic")
@@ -108,7 +113,7 @@ func TestLogrusPanicLogger(t *testing.T) {
108113
assert.Equal(t, "dataDB", fields["db"])
109114
assert.Equal(t, "logrus", fields["log"])
110115
}()
111-
absLogger.WithFields(Fields{
116+
L().WithFields(Fields{
112117
"db": "dataDB",
113118
"log": "logrus",
114119
}).Panic("db not found")
@@ -122,7 +127,8 @@ func TestLogursErrorLogger(t *testing.T) {
122127
logrus.SetOutput(&buffer)
123128
logrus.SetLevel(log.DebugLevel)
124129
absLogger, _ := NewLogrusLogger(logrus)
125-
absLogger.WithFields(Fields{
130+
ReplaceGlobals(absLogger)
131+
L().WithFields(Fields{
126132
"acctNumber": 7899,
127133
"log": "logrus",
128134
}).Errorf("Error creating account %s", "testAccount")
@@ -143,7 +149,8 @@ func TestLogrusNoOutputLogger(t *testing.T) {
143149
logrus.SetOutput(&buffer)
144150
logrus.SetLevel(log.InfoLevel)
145151
absLogger, _ := NewLogrusLogger(logrus)
146-
absLogger.WithFields(Fields{
152+
ReplaceGlobals(absLogger)
153+
L().WithFields(Fields{
147154
"foo": "bar",
148155
}).Debugf("direct")
149156

pkg/logger/zap_test.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ func TestZapInfoLogger(t *testing.T) {
2222
)
2323
z := zap.New(core)
2424
absLogger, _ := NewZapLogger(z)
25-
absLogger.WithFields(Fields{
25+
ReplaceGlobals(absLogger)
26+
L().WithFields(Fields{
2627
"foo": "bar",
2728
}).Info("direct")
2829

@@ -45,7 +46,8 @@ func TestZapInfofLogger(t *testing.T) {
4546
)
4647
z := zap.New(core)
4748
absLogger, _ := NewZapLogger(z)
48-
absLogger.WithFields(Fields{
49+
ReplaceGlobals(absLogger)
50+
L().WithFields(Fields{
4951
"ping": "pong",
5052
}).Infof("received %s balls", "ping pong")
5153

@@ -68,7 +70,8 @@ func TestZapWarnLogger(t *testing.T) {
6870
)
6971
z := zap.New(core)
7072
absLogger, _ := NewZapLogger(z)
71-
absLogger.WithFields(Fields{
73+
ReplaceGlobals(absLogger)
74+
L().WithFields(Fields{
7275
"foo": "bar",
7376
"log": "zap",
7477
}).Warn("direct")
@@ -93,7 +96,8 @@ func TestZapWarnfLogger(t *testing.T) {
9396
)
9497
z := zap.New(core)
9598
absLogger, _ := NewZapLogger(z)
96-
absLogger.WithFields(Fields{
99+
ReplaceGlobals(absLogger)
100+
L().WithFields(Fields{
97101
"ping": "pong",
98102
"log": "zap",
99103
}).Warnf("received %s balls", "table tennis")
@@ -129,7 +133,8 @@ func TestZapPanicLogger(t *testing.T) {
129133
assert.Equal(t, "dataDB", fields["db"])
130134
assert.Equal(t, "zap", fields["log"])
131135
}()
132-
absLogger.WithFields(Fields{
136+
ReplaceGlobals(absLogger)
137+
L().WithFields(Fields{
133138
"db": "dataDB",
134139
"log": "zap",
135140
}).Panic("db not found")
@@ -147,7 +152,8 @@ func TestZapErrorLogger(t *testing.T) {
147152
)
148153
z := zap.New(core)
149154
absLogger, _ := NewZapLogger(z)
150-
absLogger.WithFields(Fields{
155+
ReplaceGlobals(absLogger)
156+
L().WithFields(Fields{
151157
"acctNumber": 7899,
152158
"log": "zap",
153159
}).Errorf("Error creating account %s", "testAccount")
@@ -172,7 +178,8 @@ func TestZapNoOutputLogger(t *testing.T) {
172178
)
173179
z := zap.New(core)
174180
absLogger, _ := NewZapLogger(z)
175-
absLogger.WithFields(Fields{
181+
ReplaceGlobals(absLogger)
182+
L().WithFields(Fields{
176183
"foo": "bar",
177184
}).Debugf("direct")
178185
assert.Equal(t, "", string(buffer.Bytes()))

0 commit comments

Comments
 (0)