Skip to content

Commit feb850b

Browse files
joeybloggsjoeybloggs
authored andcommitted
Merge branch 'add-file-and-line-data'
2 parents d0d8683 + b9435dd commit feb850b

File tree

11 files changed

+1858
-343
lines changed

11 files changed

+1858
-343
lines changed

entry.go

Lines changed: 40 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package log
22

33
import (
44
"fmt"
5+
"runtime"
56
"strings"
67
"sync"
78
"time"
@@ -14,22 +15,30 @@ const (
1415

1516
// Entry represents a single log entry.
1617
type Entry struct {
17-
WG *sync.WaitGroup `json:"-"`
18-
ApplicationID string `json:"appId"`
19-
Level Level `json:"level"`
20-
Timestamp time.Time `json:"timestamp"`
21-
Message string `json:"message"`
22-
Fields []Field `json:"fields"`
18+
wg *sync.WaitGroup
19+
calldepth int
20+
ApplicationID string `json:"appId"`
21+
Level Level `json:"level"`
22+
Timestamp time.Time `json:"timestamp"`
23+
Message string `json:"message"`
24+
Fields []Field `json:"fields"`
25+
File string `json:"file"`
26+
Line int `json:"line"`
2327
}
2428

25-
func newEntry(level Level, message string, fields []Field) *Entry {
29+
func newEntry(level Level, message string, fields []Field, calldepth int) *Entry {
2630

2731
entry := Logger.entryPool.Get().(*Entry)
32+
entry.calldepth = calldepth
2833
entry.Level = level
2934
entry.Message = strings.TrimRight(message, cutset) // need to trim for adding fields later in handlers + why send uneeded whitespace
3035
entry.Fields = fields
3136
entry.Timestamp = time.Now().UTC()
3237

38+
if Logger.logCallerInfo && level != TraceLevel {
39+
_, entry.File, entry.Line, _ = runtime.Caller(entry.calldepth)
40+
}
41+
3342
return entry
3443
}
3544

@@ -39,7 +48,7 @@ var _ LeveledLogger = new(Entry)
3948
func (e *Entry) Debug(v ...interface{}) {
4049
e.Level = DebugLevel
4150
e.Message = fmt.Sprint(v...)
42-
Logger.HandleEntry(e)
51+
Logger.handleEntry(e)
4352
}
4453

4554
// Trace starts a trace & returns Traceable object to End + log
@@ -59,36 +68,36 @@ func (e *Entry) Trace(v ...interface{}) Traceable {
5968
func (e *Entry) Info(v ...interface{}) {
6069
e.Level = InfoLevel
6170
e.Message = fmt.Sprint(v...)
62-
Logger.HandleEntry(e)
71+
Logger.handleEntry(e)
6372
}
6473

6574
// Notice level formatted message.
6675
func (e *Entry) Notice(v ...interface{}) {
6776
e.Level = NoticeLevel
6877
e.Message = fmt.Sprint(v...)
69-
Logger.HandleEntry(e)
78+
Logger.handleEntry(e)
7079
}
7180

7281
// Warn level message.
7382
func (e *Entry) Warn(v ...interface{}) {
7483
e.Level = WarnLevel
7584
e.Message = fmt.Sprint(v...)
76-
Logger.HandleEntry(e)
85+
Logger.handleEntry(e)
7786
}
7887

7988
// Error level message.
8089
func (e *Entry) Error(v ...interface{}) {
8190
e.Level = ErrorLevel
8291
e.Message = fmt.Sprint(v...)
83-
Logger.HandleEntry(e)
92+
Logger.handleEntry(e)
8493
}
8594

8695
// Panic logs an Error level formatted message and then panics
8796
func (e *Entry) Panic(v ...interface{}) {
8897
s := fmt.Sprint(v...)
8998
e.Level = PanicLevel
9099
e.Message = s
91-
Logger.HandleEntry(e)
100+
Logger.handleEntry(e)
92101

93102
for _, f := range e.Fields {
94103
s += fmt.Sprintf(keyVal, f.Key, f.Value)
@@ -101,22 +110,22 @@ func (e *Entry) Panic(v ...interface{}) {
101110
func (e *Entry) Alert(v ...interface{}) {
102111
e.Level = AlertLevel
103112
e.Message = fmt.Sprint(v...)
104-
Logger.HandleEntry(e)
113+
Logger.handleEntry(e)
105114
}
106115

107116
// Fatal level message, followed by an exit.
108117
func (e *Entry) Fatal(v ...interface{}) {
109118
e.Level = FatalLevel
110119
e.Message = fmt.Sprint(v...)
111-
Logger.HandleEntry(e)
120+
Logger.handleEntry(e)
112121
exitFunc(1)
113122
}
114123

115124
// Debugf level formatted message.
116125
func (e *Entry) Debugf(msg string, v ...interface{}) {
117126
e.Level = DebugLevel
118127
e.Message = fmt.Sprintf(msg, v...)
119-
Logger.HandleEntry(e)
128+
Logger.handleEntry(e)
120129
}
121130

122131
// Tracef starts a trace & returns Traceable object to End + log
@@ -136,36 +145,36 @@ func (e *Entry) Tracef(msg string, v ...interface{}) Traceable {
136145
func (e *Entry) Infof(msg string, v ...interface{}) {
137146
e.Level = InfoLevel
138147
e.Message = fmt.Sprintf(msg, v...)
139-
Logger.HandleEntry(e)
148+
Logger.handleEntry(e)
140149
}
141150

142151
// Noticef level formatted message.
143152
func (e *Entry) Noticef(msg string, v ...interface{}) {
144153
e.Level = NoticeLevel
145154
e.Message = fmt.Sprintf(msg, v...)
146-
Logger.HandleEntry(e)
155+
Logger.handleEntry(e)
147156
}
148157

149158
// Warnf level formatted message.
150159
func (e *Entry) Warnf(msg string, v ...interface{}) {
151160
e.Level = WarnLevel
152161
e.Message = fmt.Sprintf(msg, v...)
153-
Logger.HandleEntry(e)
162+
Logger.handleEntry(e)
154163
}
155164

156165
// Errorf level formatted message.
157166
func (e *Entry) Errorf(msg string, v ...interface{}) {
158167
e.Level = ErrorLevel
159168
e.Message = fmt.Sprintf(msg, v...)
160-
Logger.HandleEntry(e)
169+
Logger.handleEntry(e)
161170
}
162171

163172
// Panicf logs an Error level formatted message and then panics
164173
func (e *Entry) Panicf(msg string, v ...interface{}) {
165174
s := fmt.Sprintf(msg, v...)
166175
e.Level = PanicLevel
167176
e.Message = s
168-
Logger.HandleEntry(e)
177+
Logger.handleEntry(e)
169178

170179
for _, f := range e.Fields {
171180
s += fmt.Sprintf(keyVal, f.Key, f.Value)
@@ -178,13 +187,21 @@ func (e *Entry) Panicf(msg string, v ...interface{}) {
178187
func (e *Entry) Alertf(msg string, v ...interface{}) {
179188
e.Level = AlertLevel
180189
e.Message = fmt.Sprintf(msg, v...)
181-
Logger.HandleEntry(e)
190+
Logger.handleEntry(e)
182191
}
183192

184193
// Fatalf level formatted message, followed by an exit.
185194
func (e *Entry) Fatalf(msg string, v ...interface{}) {
186195
e.Level = FatalLevel
187196
e.Message = fmt.Sprintf(msg, v...)
188-
Logger.HandleEntry(e)
197+
Logger.handleEntry(e)
189198
exitFunc(1)
190199
}
200+
201+
// Consumed lets the Entry and subsequently the Logger
202+
// instance know that it has been used by a handler
203+
func (e *Entry) Consumed() {
204+
if e.wg != nil {
205+
e.wg.Done()
206+
}
207+
}

examples/custom-handler/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func (c *CustomHandler) Run() chan<- *log.Entry {
4747
}
4848

4949
fmt.Println(b.String())
50-
e.WG.Done() // done writing the entry
50+
e.Consumed() // done writing the entry
5151
}
5252

5353
}(ch)

0 commit comments

Comments
 (0)