annotate vendor/github.com/sirupsen/logrus/entry.go @ 66:787b5ee0289d draft

Use vendored modules Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Sun, 23 Jul 2023 13:18:53 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1 package logrus
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
2
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
3 import (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4 "bytes"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 "context"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6 "fmt"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7 "os"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8 "reflect"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9 "runtime"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 "strings"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11 "sync"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 "time"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15 var (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 // qualified package name, cached at first use
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 logrusPackage string
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20 // Positions in the call stack when tracing to report the calling method
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21 minimumCallerDepth int
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23 // Used for caller information initialisation
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24 callerInitOnce sync.Once
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 const (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28 maximumCallerDepth int = 25
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29 knownLogrusFrames int = 4
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32 func init() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33 // start at the bottom of the stack before the package-name cache is primed
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 minimumCallerDepth = 1
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37 // Defines the key when adding errors using WithError.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38 var ErrorKey = "error"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40 // An entry is the final or intermediate Logrus logging entry. It contains all
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41 // the fields passed with WithField{,s}. It's finally logged when Trace, Debug,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42 // Info, Warn, Error, Fatal or Panic is called on it. These objects can be
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43 // reused and passed around as much as you wish to avoid field duplication.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
44 type Entry struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
45 Logger *Logger
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
46
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
47 // Contains all the fields set by the user.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
48 Data Fields
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
49
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
50 // Time at which the log entry was created
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
51 Time time.Time
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
52
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
53 // Level the log entry was logged at: Trace, Debug, Info, Warn, Error, Fatal or Panic
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
54 // This field will be set on entry firing and the value will be equal to the one in Logger struct field.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
55 Level Level
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
56
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
57 // Calling method, with package name
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
58 Caller *runtime.Frame
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
59
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
60 // Message passed to Trace, Debug, Info, Warn, Error, Fatal or Panic
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
61 Message string
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
62
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
63 // When formatter is called in entry.log(), a Buffer may be set to entry
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
64 Buffer *bytes.Buffer
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
65
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
66 // Contains the context set by the user. Useful for hook processing etc.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
67 Context context.Context
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
68
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
69 // err may contain a field formatting error
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
70 err string
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
71 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
72
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
73 func NewEntry(logger *Logger) *Entry {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
74 return &Entry{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
75 Logger: logger,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
76 // Default is three fields, plus one optional. Give a little extra room.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
77 Data: make(Fields, 6),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
78 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
79 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
80
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
81 func (entry *Entry) Dup() *Entry {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
82 data := make(Fields, len(entry.Data))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
83 for k, v := range entry.Data {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
84 data[k] = v
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
85 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
86 return &Entry{Logger: entry.Logger, Data: data, Time: entry.Time, Context: entry.Context, err: entry.err}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
87 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
88
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
89 // Returns the bytes representation of this entry from the formatter.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
90 func (entry *Entry) Bytes() ([]byte, error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
91 return entry.Logger.Formatter.Format(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
92 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
93
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
94 // Returns the string representation from the reader and ultimately the
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
95 // formatter.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
96 func (entry *Entry) String() (string, error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
97 serialized, err := entry.Bytes()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
98 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
99 return "", err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
100 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
101 str := string(serialized)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
102 return str, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
103 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
104
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
105 // Add an error as single field (using the key defined in ErrorKey) to the Entry.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
106 func (entry *Entry) WithError(err error) *Entry {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
107 return entry.WithField(ErrorKey, err)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
108 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
109
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
110 // Add a context to the Entry.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
111 func (entry *Entry) WithContext(ctx context.Context) *Entry {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
112 dataCopy := make(Fields, len(entry.Data))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
113 for k, v := range entry.Data {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
114 dataCopy[k] = v
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
115 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
116 return &Entry{Logger: entry.Logger, Data: dataCopy, Time: entry.Time, err: entry.err, Context: ctx}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
117 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
118
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
119 // Add a single field to the Entry.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
120 func (entry *Entry) WithField(key string, value interface{}) *Entry {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
121 return entry.WithFields(Fields{key: value})
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
122 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
123
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
124 // Add a map of fields to the Entry.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
125 func (entry *Entry) WithFields(fields Fields) *Entry {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
126 data := make(Fields, len(entry.Data)+len(fields))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
127 for k, v := range entry.Data {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
128 data[k] = v
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
129 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
130 fieldErr := entry.err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
131 for k, v := range fields {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
132 isErrField := false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
133 if t := reflect.TypeOf(v); t != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
134 switch {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
135 case t.Kind() == reflect.Func, t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Func:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
136 isErrField = true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
137 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
138 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
139 if isErrField {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
140 tmp := fmt.Sprintf("can not add field %q", k)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
141 if fieldErr != "" {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
142 fieldErr = entry.err + ", " + tmp
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
143 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
144 fieldErr = tmp
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
145 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
146 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
147 data[k] = v
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
148 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
149 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
150 return &Entry{Logger: entry.Logger, Data: data, Time: entry.Time, err: fieldErr, Context: entry.Context}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
151 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
152
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
153 // Overrides the time of the Entry.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
154 func (entry *Entry) WithTime(t time.Time) *Entry {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
155 dataCopy := make(Fields, len(entry.Data))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
156 for k, v := range entry.Data {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
157 dataCopy[k] = v
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
158 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
159 return &Entry{Logger: entry.Logger, Data: dataCopy, Time: t, err: entry.err, Context: entry.Context}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
160 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
161
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
162 // getPackageName reduces a fully qualified function name to the package name
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
163 // There really ought to be to be a better way...
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
164 func getPackageName(f string) string {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
165 for {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
166 lastPeriod := strings.LastIndex(f, ".")
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
167 lastSlash := strings.LastIndex(f, "/")
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
168 if lastPeriod > lastSlash {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
169 f = f[:lastPeriod]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
170 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
171 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
172 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
173 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
174
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
175 return f
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
176 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
177
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
178 // getCaller retrieves the name of the first non-logrus calling function
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
179 func getCaller() *runtime.Frame {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
180 // cache this package's fully-qualified name
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
181 callerInitOnce.Do(func() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
182 pcs := make([]uintptr, maximumCallerDepth)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
183 _ = runtime.Callers(0, pcs)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
184
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
185 // dynamic get the package name and the minimum caller depth
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
186 for i := 0; i < maximumCallerDepth; i++ {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
187 funcName := runtime.FuncForPC(pcs[i]).Name()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
188 if strings.Contains(funcName, "getCaller") {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
189 logrusPackage = getPackageName(funcName)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
190 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
191 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
192 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
193
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
194 minimumCallerDepth = knownLogrusFrames
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
195 })
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
196
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
197 // Restrict the lookback frames to avoid runaway lookups
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
198 pcs := make([]uintptr, maximumCallerDepth)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
199 depth := runtime.Callers(minimumCallerDepth, pcs)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
200 frames := runtime.CallersFrames(pcs[:depth])
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
201
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
202 for f, again := frames.Next(); again; f, again = frames.Next() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
203 pkg := getPackageName(f.Function)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
204
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
205 // If the caller isn't part of this package, we're done
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
206 if pkg != logrusPackage {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
207 return &f //nolint:scopelint
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
208 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
209 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
210
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
211 // if we got here, we failed to find the caller's context
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
212 return nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
213 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
214
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
215 func (entry Entry) HasCaller() (has bool) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
216 return entry.Logger != nil &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
217 entry.Logger.ReportCaller &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
218 entry.Caller != nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
219 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
220
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
221 func (entry *Entry) log(level Level, msg string) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
222 var buffer *bytes.Buffer
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
223
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
224 newEntry := entry.Dup()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
225
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
226 if newEntry.Time.IsZero() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
227 newEntry.Time = time.Now()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
228 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
229
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
230 newEntry.Level = level
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
231 newEntry.Message = msg
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
232
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
233 newEntry.Logger.mu.Lock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
234 reportCaller := newEntry.Logger.ReportCaller
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
235 bufPool := newEntry.getBufferPool()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
236 newEntry.Logger.mu.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
237
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
238 if reportCaller {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
239 newEntry.Caller = getCaller()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
240 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
241
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
242 newEntry.fireHooks()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
243 buffer = bufPool.Get()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
244 defer func() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
245 newEntry.Buffer = nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
246 buffer.Reset()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
247 bufPool.Put(buffer)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
248 }()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
249 buffer.Reset()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
250 newEntry.Buffer = buffer
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
251
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
252 newEntry.write()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
253
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
254 newEntry.Buffer = nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
255
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
256 // To avoid Entry#log() returning a value that only would make sense for
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
257 // panic() to use in Entry#Panic(), we avoid the allocation by checking
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
258 // directly here.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
259 if level <= PanicLevel {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
260 panic(newEntry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
261 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
262 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
263
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
264 func (entry *Entry) getBufferPool() (pool BufferPool) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
265 if entry.Logger.BufferPool != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
266 return entry.Logger.BufferPool
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
267 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
268 return bufferPool
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
269 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
270
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
271 func (entry *Entry) fireHooks() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
272 var tmpHooks LevelHooks
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
273 entry.Logger.mu.Lock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
274 tmpHooks = make(LevelHooks, len(entry.Logger.Hooks))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
275 for k, v := range entry.Logger.Hooks {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
276 tmpHooks[k] = v
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
277 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
278 entry.Logger.mu.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
279
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
280 err := tmpHooks.Fire(entry.Level, entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
281 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
282 fmt.Fprintf(os.Stderr, "Failed to fire hook: %v\n", err)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
283 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
284 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
285
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
286 func (entry *Entry) write() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
287 entry.Logger.mu.Lock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
288 defer entry.Logger.mu.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
289 serialized, err := entry.Logger.Formatter.Format(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
290 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
291 fmt.Fprintf(os.Stderr, "Failed to obtain reader, %v\n", err)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
292 return
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
293 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
294 if _, err := entry.Logger.Out.Write(serialized); err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
295 fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
296 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
297 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
298
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
299 // Log will log a message at the level given as parameter.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
300 // Warning: using Log at Panic or Fatal level will not respectively Panic nor Exit.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
301 // For this behaviour Entry.Panic or Entry.Fatal should be used instead.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
302 func (entry *Entry) Log(level Level, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
303 if entry.Logger.IsLevelEnabled(level) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
304 entry.log(level, fmt.Sprint(args...))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
305 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
306 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
307
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
308 func (entry *Entry) Trace(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
309 entry.Log(TraceLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
310 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
311
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
312 func (entry *Entry) Debug(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
313 entry.Log(DebugLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
314 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
315
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
316 func (entry *Entry) Print(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
317 entry.Info(args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
318 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
319
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
320 func (entry *Entry) Info(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
321 entry.Log(InfoLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
322 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
323
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
324 func (entry *Entry) Warn(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
325 entry.Log(WarnLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
326 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
327
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
328 func (entry *Entry) Warning(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
329 entry.Warn(args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
330 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
331
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
332 func (entry *Entry) Error(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
333 entry.Log(ErrorLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
334 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
335
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
336 func (entry *Entry) Fatal(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
337 entry.Log(FatalLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
338 entry.Logger.Exit(1)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
339 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
340
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
341 func (entry *Entry) Panic(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
342 entry.Log(PanicLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
343 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
344
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
345 // Entry Printf family functions
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
346
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
347 func (entry *Entry) Logf(level Level, format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
348 if entry.Logger.IsLevelEnabled(level) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
349 entry.Log(level, fmt.Sprintf(format, args...))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
350 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
351 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
352
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
353 func (entry *Entry) Tracef(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
354 entry.Logf(TraceLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
355 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
356
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
357 func (entry *Entry) Debugf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
358 entry.Logf(DebugLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
359 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
360
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
361 func (entry *Entry) Infof(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
362 entry.Logf(InfoLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
363 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
364
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
365 func (entry *Entry) Printf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
366 entry.Infof(format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
367 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
368
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
369 func (entry *Entry) Warnf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
370 entry.Logf(WarnLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
371 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
372
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
373 func (entry *Entry) Warningf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
374 entry.Warnf(format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
375 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
376
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
377 func (entry *Entry) Errorf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
378 entry.Logf(ErrorLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
379 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
380
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
381 func (entry *Entry) Fatalf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
382 entry.Logf(FatalLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
383 entry.Logger.Exit(1)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
384 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
385
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
386 func (entry *Entry) Panicf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
387 entry.Logf(PanicLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
388 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
389
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
390 // Entry Println family functions
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
391
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
392 func (entry *Entry) Logln(level Level, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
393 if entry.Logger.IsLevelEnabled(level) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
394 entry.Log(level, entry.sprintlnn(args...))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
395 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
396 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
397
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
398 func (entry *Entry) Traceln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
399 entry.Logln(TraceLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
400 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
401
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
402 func (entry *Entry) Debugln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
403 entry.Logln(DebugLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
404 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
405
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
406 func (entry *Entry) Infoln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
407 entry.Logln(InfoLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
408 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
409
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
410 func (entry *Entry) Println(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
411 entry.Infoln(args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
412 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
413
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
414 func (entry *Entry) Warnln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
415 entry.Logln(WarnLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
416 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
417
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
418 func (entry *Entry) Warningln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
419 entry.Warnln(args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
420 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
421
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
422 func (entry *Entry) Errorln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
423 entry.Logln(ErrorLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
424 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
425
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
426 func (entry *Entry) Fatalln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
427 entry.Logln(FatalLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
428 entry.Logger.Exit(1)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
429 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
430
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
431 func (entry *Entry) Panicln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
432 entry.Logln(PanicLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
433 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
434
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
435 // Sprintlnn => Sprint no newline. This is to get the behavior of how
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
436 // fmt.Sprintln where spaces are always added between operands, regardless of
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
437 // their type. Instead of vendoring the Sprintln implementation to spare a
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
438 // string allocation, we do the simplest thing.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
439 func (entry *Entry) sprintlnn(args ...interface{}) string {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
440 msg := fmt.Sprintln(args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
441 return msg[:len(msg)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
442 }