Skip to content

Commit 8c244cf

Browse files
committed
logger: support variable args in New function
* Any integer type will be used as buffer size * Otherwise it is a config object
1 parent ca026a4 commit 8c244cf

File tree

2 files changed

+49
-11
lines changed

2 files changed

+49
-11
lines changed

logger.go

+26-2
Original file line numberDiff line numberDiff line change
@@ -114,20 +114,44 @@ func init() {
114114
}
115115

116116
// New initializes and appends a new logger to the managed list.
117-
// Calling this function multiple times will overwrite previous logger with same mode.
117+
// Calling this function multiple times will overwrite previous initialized
118+
// logger with the same mode.
119+
//
120+
// Any integer type (i.e. int, int32, int64) will be used as buffer size.
121+
// Otherwise, the value will be used as config object to the logger.
118122
//
119123
// This function is not concurrent safe.
120-
func New(mode Mode, bufferSize int64, cfg interface{}) error {
124+
//func New(mode Mode, bufferSize int64, cfg interface{}) error {
125+
func New(mode Mode, opts ...interface{}) error {
121126
r, ok := registers[mode]
122127
if !ok {
123128
return fmt.Errorf("no register for %q", mode)
124129
}
125130

131+
bufferSize := 0
132+
var cfg interface{}
133+
for i := range opts {
134+
switch opt := opts[i].(type) {
135+
case int:
136+
bufferSize = opt
137+
case int32:
138+
bufferSize = int(opt)
139+
case int64:
140+
bufferSize = int(opt)
141+
default:
142+
cfg = opt
143+
}
144+
}
145+
126146
l, err := r(cfg)
127147
if err != nil {
128148
return fmt.Errorf("initialize logger: %v", err)
129149
}
130150

151+
if bufferSize < 0 {
152+
bufferSize = 0
153+
}
154+
131155
ctx, cancel := context.WithCancel(mgr.ctx)
132156
cl := &cancelableLogger{
133157
cancel: cancel,

logger_test.go

+23-9
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,28 @@ func TestNew(t *testing.T) {
8989
)
9090

9191
tests := []struct {
92-
name string
93-
mode Mode
94-
want error
92+
name string
93+
mode Mode
94+
bufferSize interface{}
95+
want error
9596
}{
9697
{
97-
name: "success",
98-
mode: testModeGood,
99-
want: nil,
98+
name: "success",
99+
mode: testModeGood,
100+
bufferSize: 1,
101+
want: nil,
102+
},
103+
{
104+
name: "success",
105+
mode: testModeGood,
106+
bufferSize: int32(1),
107+
want: nil,
108+
},
109+
{
110+
name: "success",
111+
mode: testModeGood,
112+
bufferSize: int64(1),
113+
want: nil,
100114
},
101115
{
102116
name: "no register",
@@ -116,7 +130,7 @@ func TestNew(t *testing.T) {
116130
}
117131
for _, tt := range tests {
118132
t.Run(tt.name, func(t *testing.T) {
119-
err := New(tt.mode, 10, nil)
133+
err := New(tt.mode, tt.bufferSize)
120134
assert.Equal(t, tt.want, err)
121135
})
122136
}
@@ -129,15 +143,15 @@ func TestRemove(t *testing.T) {
129143
mode: testMode1,
130144
}, nil
131145
})
132-
assert.Nil(t, New(testMode1, 10, nil))
146+
assert.Nil(t, New(testMode1, -1))
133147

134148
testMode2 := Mode("TestRemove2")
135149
NewRegister(testMode2, func(_ interface{}) (Logger, error) {
136150
return &noopLogger{
137151
mode: testMode2,
138152
}, nil
139153
})
140-
assert.Nil(t, New(testMode2, 10, nil))
154+
assert.Nil(t, New(testMode2, -1))
141155

142156
tests := []struct {
143157
name string

0 commit comments

Comments
 (0)