Skip to content

Commit 63feeec

Browse files
authored
Implement log wrappers for all versions of gocb and gocbcore (#5039)
* Combine all gocb loggers into a shared method * Work around vet false-positive for const equality checks. See github.com/golang/go/issues/28446 for detail * Move gocb log level equality checking to a test
1 parent b150852 commit 63feeec

File tree

2 files changed

+56
-26
lines changed

2 files changed

+56
-26
lines changed

base/logger_external.go

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,22 @@ import (
1515
"os"
1616

1717
"github.com/couchbase/clog"
18+
"github.com/couchbase/gocb"
19+
"github.com/couchbase/gocbcore"
1820
"github.com/couchbase/goutils/logging"
19-
"gopkg.in/couchbase/gocb.v1"
20-
"gopkg.in/couchbase/gocbcore.v7"
21+
gocbv1 "gopkg.in/couchbase/gocb.v1"
22+
gocbcorev7 "gopkg.in/couchbase/gocbcore.v7"
2123
)
2224

2325
// This file implements wrappers around the loggers of external packages
2426
// so that all of SG's logging output is consistent
2527
func initExternalLoggers() {
2628
gocb.SetLogger(GoCBLogger{})
2729
gocbcore.SetLogger(GoCBCoreLogger{})
30+
31+
gocbv1.SetLogger(GoCBV1Logger{})
32+
gocbcorev7.SetLogger(GoCBCoreV7Logger{})
33+
2834
logging.SetLogger(CBGoUtilsLogger{})
2935
clog.SetLoggerCallback(ClogCallback)
3036
}
@@ -44,7 +50,7 @@ var _ gocb.Logger = GoCBLogger{}
4450
// Debug -> SG Trace
4551
// Trace -> SG Trace
4652
// Others -> no-op
47-
func (GoCBLogger) Log(level gocb.LogLevel, _ int, format string, v ...interface{}) error {
53+
func (GoCBLogger) Log(level gocb.LogLevel, offset int, format string, v ...interface{}) error {
4854
switch level {
4955
case gocb.LogError:
5056
logTo(context.TODO(), LevelError, KeyAll, KeyGoCB.String()+": "+format, v...)
@@ -58,33 +64,22 @@ func (GoCBLogger) Log(level gocb.LogLevel, _ int, format string, v ...interface{
5864
return nil
5965
}
6066

61-
// ******************************************************
62-
// Implementation of github.com/couchbase/gocbcore.Logger
63-
// ******************************************************
67+
type GoCBV1Logger struct{}
6468
type GoCBCoreLogger struct{}
69+
type GoCBCoreV7Logger struct{}
6570

71+
var _ gocbv1.Logger = GoCBV1Logger{}
6672
var _ gocbcore.Logger = GoCBCoreLogger{}
73+
var _ gocbcorev7.Logger = GoCBCoreV7Logger{}
6774

68-
// Log wraps the levelled SG logs for gocbcore to use.
69-
// Log levels are mapped as follows:
70-
// Error -> SG Error
71-
// Warn -> SG Warn
72-
// Info -> SG Debug
73-
// Debug -> SG Trace
74-
// Trace -> SG Trace
75-
// Others -> no-op
76-
func (GoCBCoreLogger) Log(level gocbcore.LogLevel, _ int, format string, v ...interface{}) error {
77-
switch level {
78-
case gocbcore.LogError:
79-
logTo(context.TODO(), LevelError, KeyAll, KeyGoCB.String()+": "+format, v...)
80-
case gocbcore.LogWarn:
81-
logTo(context.TODO(), LevelWarn, KeyAll, KeyGoCB.String()+": "+format, v...)
82-
case gocbcore.LogInfo:
83-
logTo(context.TODO(), LevelDebug, KeyGoCB, format, v...)
84-
case gocbcore.LogDebug, gocbcore.LogTrace:
85-
logTo(context.TODO(), LevelTrace, KeyGoCB, format, v...)
86-
}
87-
return nil
75+
func (GoCBV1Logger) Log(level gocbv1.LogLevel, offset int, format string, v ...interface{}) error {
76+
return GoCBLogger{}.Log(gocb.LogLevel(level), offset, format, v...)
77+
}
78+
func (GoCBCoreLogger) Log(level gocbcore.LogLevel, offset int, format string, v ...interface{}) error {
79+
return GoCBLogger{}.Log(gocb.LogLevel(level), offset, format, v...)
80+
}
81+
func (GoCBCoreV7Logger) Log(level gocbcorev7.LogLevel, offset int, format string, v ...interface{}) error {
82+
return GoCBLogger{}.Log(gocb.LogLevel(level), offset, format, v...)
8883
}
8984

9085
// ******************************************************

base/logger_external_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package base
2+
3+
import (
4+
"testing"
5+
6+
"github.com/couchbase/gocb"
7+
"github.com/couchbase/gocbcore"
8+
"github.com/stretchr/testify/assert"
9+
gocbv1 "gopkg.in/couchbase/gocb.v1"
10+
gocbcorev7 "gopkg.in/couchbase/gocbcore.v7"
11+
)
12+
13+
func TestGoCBLogLevelEquality(t *testing.T) {
14+
// Ensures all gocb and gocbcore log levels match between versions.
15+
// If they don't, we'll need to revisit the log wrappers to not just do direct type conversions to implement 4 loggers.
16+
assert.Equal(t, gocb.LogError, gocb.LogLevel(gocbcore.LogError))
17+
assert.Equal(t, gocb.LogError, gocb.LogLevel(gocbv1.LogError))
18+
assert.Equal(t, gocb.LogError, gocb.LogLevel(gocbcorev7.LogError))
19+
20+
assert.Equal(t, gocb.LogWarn, gocb.LogLevel(gocbcore.LogWarn))
21+
assert.Equal(t, gocb.LogWarn, gocb.LogLevel(gocbv1.LogWarn))
22+
assert.Equal(t, gocb.LogWarn, gocb.LogLevel(gocbcorev7.LogWarn))
23+
24+
assert.Equal(t, gocb.LogInfo, gocb.LogLevel(gocbcore.LogInfo))
25+
assert.Equal(t, gocb.LogInfo, gocb.LogLevel(gocbv1.LogInfo))
26+
assert.Equal(t, gocb.LogInfo, gocb.LogLevel(gocbcorev7.LogInfo))
27+
28+
assert.Equal(t, gocb.LogDebug, gocb.LogLevel(gocbcore.LogDebug))
29+
assert.Equal(t, gocb.LogDebug, gocb.LogLevel(gocbv1.LogDebug))
30+
assert.Equal(t, gocb.LogDebug, gocb.LogLevel(gocbcorev7.LogDebug))
31+
32+
assert.Equal(t, gocb.LogTrace, gocb.LogLevel(gocbcore.LogTrace))
33+
assert.Equal(t, gocb.LogTrace, gocb.LogLevel(gocbv1.LogTrace))
34+
assert.Equal(t, gocb.LogTrace, gocb.LogLevel(gocbcorev7.LogTrace))
35+
}

0 commit comments

Comments
 (0)