Skip to content

Commit dcceb14

Browse files
joeybloggsjoeybloggs
authored andcommitted
Update to have configurable log levels for gathering caller info or not.
1 parent dd5bf8a commit dcceb14

File tree

11 files changed

+91
-71
lines changed

11 files changed

+91
-71
lines changed

benchmarks/benchmark_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func BenchmarkConsoleParallel(b *testing.B) {
7878
log.F("duration", time.Second),
7979
log.F("user-defined type", _jane),
8080
log.F("another string", "done!"),
81-
).Debug("Go fast.")
81+
).Info("Go fast.")
8282
}
8383

8484
})
@@ -89,7 +89,7 @@ func BenchmarkConsoleSimpleFieldsParallel(b *testing.B) {
8989
// log setup in TestMain
9090
b.RunParallel(func(pb *testing.PB) {
9191
for pb.Next() {
92-
log.Debug("Go fast.")
92+
log.Info("Go fast.")
9393
}
9494

9595
})

handlers/console/console.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,13 @@ type FormatFunc func() Formatter
1919
type Formatter func(e *log.Entry) []byte
2020

2121
const (
22-
defaultTS = "2006-01-02T15:04:05.000000000Z07:00"
23-
space = byte(' ')
24-
equals = byte('=')
25-
newLine = byte('\n')
26-
colon = byte(':')
27-
base10 = 10
28-
v = "%v"
29-
gopath = "GOPATH"
22+
space = byte(' ')
23+
equals = byte('=')
24+
newLine = byte('\n')
25+
colon = byte(':')
26+
base10 = 10
27+
v = "%v"
28+
gopath = "GOPATH"
3029
)
3130

3231
// Console is an instance of the console logger
@@ -62,7 +61,7 @@ func New() *Console {
6261
numWorkers: 1,
6362
colors: defaultColors,
6463
writer: os.Stderr,
65-
timestampFormat: defaultTS,
64+
timestampFormat: log.DefaultTimeFormat,
6665
displayColor: true,
6766
fileDisplay: log.Lshortfile,
6867
}

handlers/console/console_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func TestConsoleLogger(t *testing.T) {
2929
cLog.DisplayColor(false)
3030
cLog.SetBuffersAndWorkers(3, 0)
3131
cLog.SetTimestampFormat("MST")
32-
32+
log.SetCallerInfoLevels(log.WarnLevel, log.ErrorLevel, log.PanicLevel, log.AlertLevel, log.FatalLevel)
3333
log.RegisterHandler(cLog, log.AllLevels...)
3434

3535
for i, tt := range tests {

handlers/http/http.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@ type FormatFunc func() Formatter
2222
type Formatter func(e *log.Entry) []byte
2323

2424
const (
25-
defaultTS = "2006-01-02T15:04:05.000000000Z07:00"
26-
space = byte(' ')
27-
equals = byte('=')
28-
colon = byte(':')
29-
base10 = 10
30-
v = "%v"
31-
gopath = "GOPATH"
25+
space = byte(' ')
26+
equals = byte('=')
27+
colon = byte(':')
28+
base10 = 10
29+
v = "%v"
30+
gopath = "GOPATH"
3231
)
3332

3433
// HTTP is an instance of the http logger
@@ -56,7 +55,7 @@ func New(remoteHost string, method string, header stdhttp.Header) (*HTTP, error)
5655
buffer: 0,
5756
remoteHost: remoteHost,
5857
numWorkers: 1,
59-
timestampFormat: defaultTS,
58+
timestampFormat: log.DefaultTimeFormat,
6059
httpClient: stdhttp.Client{},
6160
header: header,
6261
method: method,

handlers/http/http_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ func TestHTTPLogger(t *testing.T) {
4848
if err != nil {
4949
log.Fatalf("Error initializing HTTP recieved '%s'", err)
5050
}
51-
5251
hLog.SetBuffersAndWorkers(0, 0)
5352
hLog.SetTimestampFormat("MST")
53+
log.SetCallerInfoLevels(log.WarnLevel, log.ErrorLevel, log.PanicLevel, log.AlertLevel, log.FatalLevel)
5454
log.RegisterHandler(hLog, log.AllLevels...)
5555

5656
for i, tt := range tests {

handlers/syslog/syslog.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,12 @@ type FormatFunc func() Formatter
1919
type Formatter func(e *log.Entry) []byte
2020

2121
const (
22-
defaultTS = "2006-01-02T15:04:05.000000000Z07:00"
23-
space = byte(' ')
24-
equals = byte('=')
25-
colon = byte(':')
26-
base10 = 10
27-
v = "%v"
28-
gopath = "GOPATH"
22+
space = byte(' ')
23+
equals = byte('=')
24+
colon = byte(':')
25+
base10 = 10
26+
v = "%v"
27+
gopath = "GOPATH"
2928
)
3029

3130
// Syslog is an instance of the syslog logger
@@ -67,7 +66,7 @@ func New(network string, raddr string, priority syslog.Priority, tag string) (*S
6766
numWorkers: 1,
6867
colors: defaultColors,
6968
displayColor: false,
70-
timestampFormat: defaultTS,
69+
timestampFormat: log.DefaultTimeFormat,
7170
fileDisplay: log.Lshortfile,
7271
}
7372

handlers/syslog/syslog_test.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,24 @@ func TestSyslogLogger(t *testing.T) {
4141

4242
addr, err := net.ResolveUDPAddr("udp", ":2000")
4343
if err != nil {
44-
t.Errorf("Expected '%s' Got '%s'", nil, err)
44+
t.Errorf("Expected '%v' Got '%v'", nil, err)
4545
}
4646

4747
conn, err := net.ListenUDP("udp", addr)
4848
if err != nil {
49-
t.Errorf("Expected '%s' Got '%s'", nil, err)
49+
t.Errorf("Expected '%v' Got '%v'", nil, err)
5050
}
5151
defer conn.Close()
5252

5353
sLog, err := New("udp", "127.0.0.1:2000", stdsyslog.LOG_DEBUG, "")
5454
if err != nil {
55-
t.Errorf("Expected '%s' Got '%s'", nil, err)
55+
t.Errorf("Expected '%v' Got '%v'", nil, err)
5656
}
5757

5858
sLog.DisplayColor(false)
5959
sLog.SetBuffersAndWorkers(3, 3)
6060
sLog.SetTimestampFormat("MST")
61-
61+
log.SetCallerInfoLevels(log.WarnLevel, log.ErrorLevel, log.PanicLevel, log.AlertLevel, log.FatalLevel)
6262
log.RegisterHandler(sLog, log.AllLevels...)
6363

6464
for i, tt := range tests {
@@ -148,18 +148,18 @@ func TestSyslogLoggerColor(t *testing.T) {
148148

149149
addr, err := net.ResolveUDPAddr("udp", ":2001")
150150
if err != nil {
151-
t.Errorf("Expected '%s' Got '%s'", nil, err)
151+
t.Errorf("Expected '%v' Got '%v'", nil, err)
152152
}
153153

154154
conn, err := net.ListenUDP("udp", addr)
155155
if err != nil {
156-
t.Errorf("Expected '%s' Got '%s'", nil, err)
156+
t.Errorf("Expected '%v' Got '%s'", nil, err)
157157
}
158158
defer conn.Close()
159159

160160
sLog, err := New("udp", "127.0.0.1:2001", stdsyslog.LOG_DEBUG, "")
161161
if err != nil {
162-
t.Errorf("Expected '%s' Got '%s'", nil, err)
162+
t.Errorf("Expected '%v' Got '%s'", nil, err)
163163
}
164164

165165
sLog.DisplayColor(true)
@@ -266,30 +266,30 @@ func TestSyslogLoggerColor(t *testing.T) {
266266
func TestBadAddress(t *testing.T) {
267267
sLog, err := New("udp", "255.255.255.67", stdsyslog.LOG_DEBUG, "")
268268
if err == nil {
269-
log.Errorf("Expected '%s' Got '%s'", "not nil", err)
269+
log.Errorf("Expected '%v' Got '%v'", "not nil", err)
270270
}
271271

272272
if sLog != nil {
273-
log.Errorf("Expected '%s' Got '%s'", nil, sLog)
273+
log.Errorf("Expected '%v' Got '%v'", nil, sLog)
274274
}
275275
}
276276

277277
func TestBadWorkerCountAndCustomFormatFunc(t *testing.T) {
278278

279279
addr, err := net.ResolveUDPAddr("udp", ":2004")
280280
if err != nil {
281-
log.Errorf("Expected '%s' Got '%s'", nil, err)
281+
log.Errorf("Expected '%v' Got '%v'", nil, err)
282282
}
283283

284284
conn, err := net.ListenUDP("udp", addr)
285285
if err != nil {
286-
log.Errorf("Expected '%s' Got '%s'", nil, err)
286+
log.Errorf("Expected '%v' Got '%v'", nil, err)
287287
}
288288
defer conn.Close()
289289

290290
sLog, err := New("udp", "127.0.0.1:2004", stdsyslog.LOG_DEBUG, "")
291291
if err != nil {
292-
log.Errorf("Expected '%s' Got '%s'", nil, err)
292+
log.Errorf("Expected '%v' Got '%v'", nil, err)
293293
}
294294

295295
sLog.DisplayColor(true)
@@ -313,18 +313,18 @@ func TestSetFilename(t *testing.T) {
313313

314314
addr, err := net.ResolveUDPAddr("udp", ":2005")
315315
if err != nil {
316-
log.Errorf("Expected '%s' Got '%s'", nil, err)
316+
log.Errorf("Expected '%v' Got '%v'", nil, err)
317317
}
318318

319319
conn, err := net.ListenUDP("udp", addr)
320320
if err != nil {
321-
log.Errorf("Expected '%s' Got '%s'", nil, err)
321+
log.Errorf("Expected '%v' Got '%v'", nil, err)
322322
}
323323
defer conn.Close()
324324

325325
sLog, err := New("udp", "127.0.0.1:2005", stdsyslog.LOG_DEBUG, "")
326326
if err != nil {
327-
log.Errorf("Expected '%s' Got '%s'", nil, err)
327+
log.Errorf("Expected '%v' Got '%v'", nil, err)
328328
}
329329

330330
sLog.DisplayColor(false)
@@ -343,18 +343,18 @@ func TestSetFilename(t *testing.T) {
343343
func TestSetFilenameColor(t *testing.T) {
344344
addr, err := net.ResolveUDPAddr("udp", ":2006")
345345
if err != nil {
346-
log.Errorf("Expected '%s' Got '%s'", nil, err)
346+
log.Errorf("Expected '%v' Got '%v'", nil, err)
347347
}
348348

349349
conn, err := net.ListenUDP("udp", addr)
350350
if err != nil {
351-
log.Errorf("Expected '%s' Got '%s'", nil, err)
351+
log.Errorf("Expected '%v' Got '%v'", nil, err)
352352
}
353353
defer conn.Close()
354354

355355
sLog, err := New("udp", "127.0.0.1:2006", stdsyslog.LOG_DEBUG, "")
356356
if err != nil {
357-
log.Errorf("Expected '%s' Got '%s'", nil, err)
357+
log.Errorf("Expected '%v' Got '%v'", nil, err)
358358
}
359359

360360
sLog.DisplayColor(true)

log.go

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,22 @@ type LevelHandlerChannels map[Level]HandlerChannels
2626
type DurationFormatFunc func(time.Duration) string
2727

2828
type logger struct {
29-
fieldPool *sync.Pool
30-
entryPool *sync.Pool
31-
tracePool *sync.Pool
32-
channels LevelHandlerChannels
33-
durationFunc DurationFormatFunc
34-
timeFormat string
35-
appID string
36-
logCallerInfo bool
29+
fieldPool *sync.Pool
30+
entryPool *sync.Pool
31+
tracePool *sync.Pool
32+
channels LevelHandlerChannels
33+
durationFunc DurationFormatFunc
34+
timeFormat string
35+
appID string
36+
callerInfoLevels [9]bool
3737
}
3838

39+
const (
40+
// DefaultTimeFormat is the default time format when parsing Time values.
41+
// it is exposed to allow handlers to use and not have to redefine
42+
DefaultTimeFormat = "2006-01-02T15:04:05.000000000Z07:00"
43+
)
44+
3945
// Logger is the default instance of the log package
4046
var (
4147
once sync.Once
@@ -55,7 +61,18 @@ func init() {
5561
}},
5662
channels: make(LevelHandlerChannels),
5763
durationFunc: func(d time.Duration) string { return d.String() },
58-
timeFormat: time.RFC3339Nano,
64+
timeFormat: DefaultTimeFormat,
65+
callerInfoLevels: [9]bool{
66+
true,
67+
false,
68+
false,
69+
false,
70+
true,
71+
true,
72+
true,
73+
true,
74+
true,
75+
},
5976
}
6077

6178
Logger.entryPool = &sync.Pool{New: func() interface{} {
@@ -242,7 +259,7 @@ func (l *logger) HandleEntry(e *Entry) {
242259
// gather info if WarnLevel, ErrorLevel, PanicLevel, AlertLevel, FatalLevel or
243260
// gathering info for all levels, but only if no line info already exists; we could
244261
// be doing central logging.
245-
if e.Line == 0 && (e.Level > 3 || Logger.logCallerInfo) {
262+
if e.Line == 0 && l.callerInfoLevels[e.Level] {
246263
_, e.File, e.Line, _ = runtime.Caller(e.calldepth)
247264
}
248265

@@ -316,11 +333,17 @@ func (l *logger) SetApplicationID(id string) {
316333
l.appID = id
317334
}
318335

319-
// SetCallerInfo tells the logger to gather and set file and line number
320-
// information on all Entry objects regardless of log type.
321-
// By defaut only error or warning style logs gather this information by default.
322-
func (l *logger) SetCallerInfo(info bool) {
323-
l.logCallerInfo = info
336+
// SetCallerInfoLevels tells the logger to gather and set file and line number
337+
// information on Entry objects for the provided log levels.
338+
// By defaut all but TraceLevel, InfoLevel and NoticeLevel are set to gather information.
339+
func (l *logger) SetCallerInfoLevels(levels ...Level) {
340+
for i := 0; i < len(l.callerInfoLevels); i++ {
341+
l.callerInfoLevels[i] = false
342+
}
343+
344+
for i := 0; i < len(levels); i++ {
345+
l.callerInfoLevels[int(levels[i])] = true
346+
}
324347
}
325348

326349
// SetCallerSkipDiff adds the provided diff to the caller SkipLevel values.

log_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func TestConsoleLogger1(t *testing.T) {
2929
th := &testHandler{
3030
writer: buff,
3131
}
32-
32+
Logger.SetCallerInfoLevels(WarnLevel, ErrorLevel, PanicLevel, AlertLevel, FatalLevel)
3333
Logger.RegisterHandler(th, AllLevels...)
3434

3535
if bl := Logger.HasHandlers(); !bl {
@@ -144,7 +144,7 @@ func TestConsoleLoggerCaller1(t *testing.T) {
144144
tests := getLogCallerTests1()
145145

146146
buff := new(bytes.Buffer)
147-
Logger.SetCallerInfo(true)
147+
Logger.SetCallerInfoLevels(AllLevels...)
148148
Logger.SetCallerSkipDiff(0)
149149

150150
th := &testHandler{

pkg.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -198,11 +198,11 @@ func SetTimeFormat(format string) {
198198
Logger.SetTimeFormat(format)
199199
}
200200

201-
// SetCallerInfo tells the logger to gather and set file and line number
202-
// information on all Entry objects regardless of log type.
203-
// By defaut only error or warning style logs gather this information by default.
204-
func SetCallerInfo(info bool) {
205-
Logger.SetCallerInfo(info)
201+
// SetCallerInfoLevels tells the logger to gather and set file and line number
202+
// information on Entry objects for the provided log levels.
203+
// By defaut all but TraceLevel, InfoLevel and NoticeLevel are set to gather information.
204+
func SetCallerInfoLevels(levels ...Level) {
205+
Logger.SetCallerInfoLevels(levels...)
206206
}
207207

208208
// SetCallerSkipDiff adds the provided diff to the caller SkipLevel values.

0 commit comments

Comments
 (0)