annotate vendor/github.com/sirupsen/logrus/logger.go @ 69:03019bbf2e0e draft

Fix a bug that I caused Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Sat, 16 Sep 2023 16:11:35 +0000
parents 787b5ee0289d
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 "context"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 "io"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6 "os"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7 "sync"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8 "sync/atomic"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9 "time"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 // LogFunction For big messages, it can be more efficient to pass a function
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13 // and only call it if the log level is actually enables rather than
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14 // generating the log message and then checking if the level is enabled
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15 type LogFunction func() []interface{}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 type Logger struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 // The logs are `io.Copy`'d to this in a mutex. It's common to set this to a
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19 // file, or leave it default which is `os.Stderr`. You can also set this to
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20 // something more adventurous, such as logging to Kafka.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21 Out io.Writer
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 // Hooks for the logger instance. These allow firing events based on logging
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23 // levels and log entries. For example, to send errors to an error tracking
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24 // service, log to StatsD or dump the core on fatal errors.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 Hooks LevelHooks
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26 // All log entries pass through the formatter before logged to Out. The
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 // included formatters are `TextFormatter` and `JSONFormatter` for which
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28 // TextFormatter is the default. In development (when a TTY is attached) it
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29 // logs with colors, but to a file it wouldn't. You can easily implement your
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30 // own that implements the `Formatter` interface, see the `README` or included
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31 // formatters for examples.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32 Formatter Formatter
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 // Flag for whether to log caller info (off by default)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 ReportCaller bool
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37 // The logging level the logger should log at. This is typically (and defaults
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38 // to) `logrus.Info`, which allows Info(), Warn(), Error() and Fatal() to be
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39 // logged.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40 Level Level
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41 // Used to sync writing to the log. Locking is enabled by Default
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42 mu MutexWrap
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43 // Reusable empty entry
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
44 entryPool sync.Pool
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
45 // Function to exit the application, defaults to `os.Exit()`
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
46 ExitFunc exitFunc
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
47 // The buffer pool used to format the log. If it is nil, the default global
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
48 // buffer pool will be used.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
49 BufferPool BufferPool
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
50 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
51
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
52 type exitFunc func(int)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
53
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
54 type MutexWrap struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
55 lock sync.Mutex
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
56 disabled bool
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
57 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
58
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
59 func (mw *MutexWrap) Lock() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
60 if !mw.disabled {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
61 mw.lock.Lock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
62 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
63 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
64
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
65 func (mw *MutexWrap) Unlock() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
66 if !mw.disabled {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
67 mw.lock.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
68 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
69 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
70
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
71 func (mw *MutexWrap) Disable() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
72 mw.disabled = true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
73 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
74
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
75 // Creates a new logger. Configuration should be set by changing `Formatter`,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
76 // `Out` and `Hooks` directly on the default logger instance. You can also just
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
77 // instantiate your own:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
78 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
79 // var log = &logrus.Logger{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
80 // Out: os.Stderr,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
81 // Formatter: new(logrus.TextFormatter),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
82 // Hooks: make(logrus.LevelHooks),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
83 // Level: logrus.DebugLevel,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
84 // }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
85 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
86 // It's recommended to make this a global instance called `log`.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
87 func New() *Logger {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
88 return &Logger{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
89 Out: os.Stderr,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
90 Formatter: new(TextFormatter),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
91 Hooks: make(LevelHooks),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
92 Level: InfoLevel,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
93 ExitFunc: os.Exit,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
94 ReportCaller: false,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
95 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
96 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
97
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
98 func (logger *Logger) newEntry() *Entry {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
99 entry, ok := logger.entryPool.Get().(*Entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
100 if ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
101 return entry
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
102 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
103 return NewEntry(logger)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
104 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
105
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
106 func (logger *Logger) releaseEntry(entry *Entry) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
107 entry.Data = map[string]interface{}{}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
108 logger.entryPool.Put(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
109 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
110
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
111 // WithField allocates a new entry and adds a field to it.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
112 // Debug, Print, Info, Warn, Error, Fatal or Panic must be then applied to
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
113 // this new returned entry.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
114 // If you want multiple fields, use `WithFields`.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
115 func (logger *Logger) WithField(key string, value interface{}) *Entry {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
116 entry := logger.newEntry()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
117 defer logger.releaseEntry(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
118 return entry.WithField(key, value)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
119 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
120
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
121 // Adds a struct of fields to the log entry. All it does is call `WithField` for
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
122 // each `Field`.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
123 func (logger *Logger) WithFields(fields Fields) *Entry {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
124 entry := logger.newEntry()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
125 defer logger.releaseEntry(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
126 return entry.WithFields(fields)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
127 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
128
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
129 // Add an error as single field to the log entry. All it does is call
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
130 // `WithError` for the given `error`.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
131 func (logger *Logger) WithError(err error) *Entry {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
132 entry := logger.newEntry()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
133 defer logger.releaseEntry(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
134 return entry.WithError(err)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
135 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
136
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
137 // Add a context to the log entry.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
138 func (logger *Logger) WithContext(ctx context.Context) *Entry {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
139 entry := logger.newEntry()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
140 defer logger.releaseEntry(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
141 return entry.WithContext(ctx)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
142 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
143
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
144 // Overrides the time of the log entry.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
145 func (logger *Logger) WithTime(t time.Time) *Entry {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
146 entry := logger.newEntry()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
147 defer logger.releaseEntry(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
148 return entry.WithTime(t)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
149 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
150
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
151 func (logger *Logger) Logf(level Level, format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
152 if logger.IsLevelEnabled(level) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
153 entry := logger.newEntry()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
154 entry.Logf(level, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
155 logger.releaseEntry(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
156 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
157 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
158
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
159 func (logger *Logger) Tracef(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
160 logger.Logf(TraceLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
161 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
162
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
163 func (logger *Logger) Debugf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
164 logger.Logf(DebugLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
165 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
166
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
167 func (logger *Logger) Infof(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
168 logger.Logf(InfoLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
169 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
170
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
171 func (logger *Logger) Printf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
172 entry := logger.newEntry()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
173 entry.Printf(format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
174 logger.releaseEntry(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
175 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
176
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
177 func (logger *Logger) Warnf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
178 logger.Logf(WarnLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
179 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
180
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
181 func (logger *Logger) Warningf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
182 logger.Warnf(format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
183 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
184
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
185 func (logger *Logger) Errorf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
186 logger.Logf(ErrorLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
187 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
188
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
189 func (logger *Logger) Fatalf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
190 logger.Logf(FatalLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
191 logger.Exit(1)
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 func (logger *Logger) Panicf(format string, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
195 logger.Logf(PanicLevel, format, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
196 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
197
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
198 // Log will log a message at the level given as parameter.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
199 // Warning: using Log at Panic or Fatal level will not respectively Panic nor Exit.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
200 // For this behaviour Logger.Panic or Logger.Fatal should be used instead.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
201 func (logger *Logger) Log(level Level, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
202 if logger.IsLevelEnabled(level) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
203 entry := logger.newEntry()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
204 entry.Log(level, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
205 logger.releaseEntry(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
206 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
207 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
208
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
209 func (logger *Logger) LogFn(level Level, fn LogFunction) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
210 if logger.IsLevelEnabled(level) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
211 entry := logger.newEntry()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
212 entry.Log(level, fn()...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
213 logger.releaseEntry(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
214 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
215 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
216
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
217 func (logger *Logger) Trace(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
218 logger.Log(TraceLevel, args...)
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 (logger *Logger) Debug(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
222 logger.Log(DebugLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
223 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
224
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
225 func (logger *Logger) Info(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
226 logger.Log(InfoLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
227 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
228
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
229 func (logger *Logger) Print(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
230 entry := logger.newEntry()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
231 entry.Print(args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
232 logger.releaseEntry(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
233 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
234
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
235 func (logger *Logger) Warn(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
236 logger.Log(WarnLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
237 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
238
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
239 func (logger *Logger) Warning(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
240 logger.Warn(args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
241 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
242
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
243 func (logger *Logger) Error(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
244 logger.Log(ErrorLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
245 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
246
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
247 func (logger *Logger) Fatal(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
248 logger.Log(FatalLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
249 logger.Exit(1)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
250 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
251
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
252 func (logger *Logger) Panic(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
253 logger.Log(PanicLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
254 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
255
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
256 func (logger *Logger) TraceFn(fn LogFunction) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
257 logger.LogFn(TraceLevel, fn)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
258 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
259
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
260 func (logger *Logger) DebugFn(fn LogFunction) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
261 logger.LogFn(DebugLevel, fn)
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 (logger *Logger) InfoFn(fn LogFunction) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
265 logger.LogFn(InfoLevel, fn)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
266 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
267
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
268 func (logger *Logger) PrintFn(fn LogFunction) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
269 entry := logger.newEntry()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
270 entry.Print(fn()...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
271 logger.releaseEntry(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
272 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
273
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
274 func (logger *Logger) WarnFn(fn LogFunction) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
275 logger.LogFn(WarnLevel, fn)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
276 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
277
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
278 func (logger *Logger) WarningFn(fn LogFunction) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
279 logger.WarnFn(fn)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
280 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
281
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
282 func (logger *Logger) ErrorFn(fn LogFunction) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
283 logger.LogFn(ErrorLevel, fn)
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 (logger *Logger) FatalFn(fn LogFunction) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
287 logger.LogFn(FatalLevel, fn)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
288 logger.Exit(1)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
289 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
290
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
291 func (logger *Logger) PanicFn(fn LogFunction) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
292 logger.LogFn(PanicLevel, fn)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
293 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
294
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
295 func (logger *Logger) Logln(level Level, args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
296 if logger.IsLevelEnabled(level) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
297 entry := logger.newEntry()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
298 entry.Logln(level, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
299 logger.releaseEntry(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
300 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
301 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
302
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
303 func (logger *Logger) Traceln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
304 logger.Logln(TraceLevel, 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 func (logger *Logger) Debugln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
308 logger.Logln(DebugLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
309 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
310
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
311 func (logger *Logger) Infoln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
312 logger.Logln(InfoLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
313 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
314
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
315 func (logger *Logger) Println(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
316 entry := logger.newEntry()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
317 entry.Println(args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
318 logger.releaseEntry(entry)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
319 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
320
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
321 func (logger *Logger) Warnln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
322 logger.Logln(WarnLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
323 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
324
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
325 func (logger *Logger) Warningln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
326 logger.Warnln(args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
327 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
328
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
329 func (logger *Logger) Errorln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
330 logger.Logln(ErrorLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
331 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
332
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
333 func (logger *Logger) Fatalln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
334 logger.Logln(FatalLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
335 logger.Exit(1)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
336 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
337
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
338 func (logger *Logger) Panicln(args ...interface{}) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
339 logger.Logln(PanicLevel, args...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
340 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
341
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
342 func (logger *Logger) Exit(code int) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
343 runHandlers()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
344 if logger.ExitFunc == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
345 logger.ExitFunc = os.Exit
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
346 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
347 logger.ExitFunc(code)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
348 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
349
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
350 //When file is opened with appending mode, it's safe to
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
351 //write concurrently to a file (within 4k message on Linux).
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
352 //In these cases user can choose to disable the lock.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
353 func (logger *Logger) SetNoLock() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
354 logger.mu.Disable()
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 (logger *Logger) level() Level {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
358 return Level(atomic.LoadUint32((*uint32)(&logger.Level)))
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 // SetLevel sets the logger level.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
362 func (logger *Logger) SetLevel(level Level) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
363 atomic.StoreUint32((*uint32)(&logger.Level), uint32(level))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
364 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
365
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
366 // GetLevel returns the logger level.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
367 func (logger *Logger) GetLevel() Level {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
368 return logger.level()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
369 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
370
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
371 // AddHook adds a hook to the logger hooks.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
372 func (logger *Logger) AddHook(hook Hook) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
373 logger.mu.Lock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
374 defer logger.mu.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
375 logger.Hooks.Add(hook)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
376 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
377
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
378 // IsLevelEnabled checks if the log level of the logger is greater than the level param
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
379 func (logger *Logger) IsLevelEnabled(level Level) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
380 return logger.level() >= level
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
381 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
382
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
383 // SetFormatter sets the logger formatter.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
384 func (logger *Logger) SetFormatter(formatter Formatter) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
385 logger.mu.Lock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
386 defer logger.mu.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
387 logger.Formatter = formatter
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 // SetOutput sets the logger output.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
391 func (logger *Logger) SetOutput(output io.Writer) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
392 logger.mu.Lock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
393 defer logger.mu.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
394 logger.Out = output
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 func (logger *Logger) SetReportCaller(reportCaller bool) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
398 logger.mu.Lock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
399 defer logger.mu.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
400 logger.ReportCaller = reportCaller
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
401 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
402
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
403 // ReplaceHooks replaces the logger hooks and returns the old ones
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
404 func (logger *Logger) ReplaceHooks(hooks LevelHooks) LevelHooks {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
405 logger.mu.Lock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
406 oldHooks := logger.Hooks
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
407 logger.Hooks = hooks
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
408 logger.mu.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
409 return oldHooks
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
410 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
411
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
412 // SetBufferPool sets the logger buffer pool.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
413 func (logger *Logger) SetBufferPool(pool BufferPool) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
414 logger.mu.Lock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
415 defer logger.mu.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
416 logger.BufferPool = pool
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
417 }