@@ -33,9 +33,11 @@ func init() {
3333
3434// Logger is a logger for logging structured data in a beautfiul and fast manner.
3535type Logger struct {
36- writer writer.Writer
37- maxLevel levels.Level
38- formatter formatter.Formatter
36+ writer writer.Writer
37+ maxLevel levels.Level
38+ formatter formatter.Formatter
39+ timestampMinLevel levels.Level
40+ timestamp bool
3941}
4042
4143// Log logs a message to a logger instance
@@ -74,6 +76,12 @@ func (l *Logger) SetWriter(writer writer.Writer) {
7476 l .writer = writer
7577}
7678
79+ // SetTimestamp enables/disables automatic timestamp
80+ func (l * Logger ) SetTimestamp (timestamp bool , minLevel levels.Level ) {
81+ l .timestamp = timestamp
82+ l .timestampMinLevel = minLevel
83+ }
84+
7785// Event is a log event to be written with data
7886type Event struct {
7987 logger * Logger
@@ -82,6 +90,26 @@ type Event struct {
8290 metadata map [string ]string
8391}
8492
93+ func newDefaultEventWithLevel (level levels.Level ) * Event {
94+ return newEventWithLevelAndLogger (level , DefaultLogger )
95+ }
96+
97+ func newEventWithLevelAndLogger (level levels.Level , l * Logger ) * Event {
98+ event := & Event {
99+ logger : l ,
100+ level : level ,
101+ metadata : make (map [string ]string ),
102+ }
103+ if l .timestamp && level >= l .timestampMinLevel {
104+ event .TimeStamp ()
105+ }
106+ return event
107+ }
108+
109+ func (e * Event ) setLevelMetadata (level levels.Level ) {
110+ e .metadata ["label" ] = labels [level ]
111+ }
112+
85113// Label applies a custom label on the log event
86114func (e * Event ) Label (label string ) * Event {
87115 e .metadata ["label" ] = label
@@ -124,178 +152,104 @@ func (e *Event) MsgFunc(messageSupplier func() string) {
124152
125153// Info writes a info message on the screen with the default label
126154func Info () * Event {
127- level := levels .LevelInfo
128- event := & Event {
129- logger : DefaultLogger ,
130- level : level ,
131- metadata : make (map [string ]string ),
132- }
133- event .metadata ["label" ] = labels [level ]
155+ event := newDefaultEventWithLevel (levels .LevelInfo )
156+ event .setLevelMetadata (levels .LevelInfo )
134157 return event
135158}
136159
137160// Warning writes a warning message on the screen with the default label
138161func Warning () * Event {
139- level := levels .LevelWarning
140- event := & Event {
141- logger : DefaultLogger ,
142- level : level ,
143- metadata : make (map [string ]string ),
144- }
145- event .metadata ["label" ] = labels [level ]
162+ event := newDefaultEventWithLevel (levels .LevelWarning )
163+ event .setLevelMetadata (levels .LevelWarning )
146164 return event
147165}
148166
149167// Error writes a error message on the screen with the default label
150168func Error () * Event {
151- level := levels .LevelError
152- event := & Event {
153- logger : DefaultLogger ,
154- level : level ,
155- metadata : make (map [string ]string ),
156- }
157- event .metadata ["label" ] = labels [level ]
169+ event := newDefaultEventWithLevel (levels .LevelError )
170+ event .setLevelMetadata (levels .LevelError )
158171 return event
159172}
160173
161174// Debug writes an error message on the screen with the default label
162175func Debug () * Event {
163- level := levels .LevelDebug
164- event := & Event {
165- logger : DefaultLogger ,
166- level : level ,
167- metadata : make (map [string ]string ),
168- }
169- event .metadata ["label" ] = labels [level ]
176+ event := newDefaultEventWithLevel (levels .LevelDebug )
177+ event .setLevelMetadata (levels .LevelDebug )
170178 return event
171179}
172180
173181// Fatal exits the program if we encounter a fatal error
174182func Fatal () * Event {
175- level := levels .LevelFatal
176- event := & Event {
177- logger : DefaultLogger ,
178- level : level ,
179- metadata : make (map [string ]string ),
180- }
181- event .metadata ["label" ] = labels [level ]
183+ event := newDefaultEventWithLevel (levels .LevelFatal )
184+ event .setLevelMetadata (levels .LevelFatal )
182185 return event
183186}
184187
185188// Silent prints a string on stdout without any extra labels.
186189func Silent () * Event {
187- level := levels .LevelSilent
188- event := & Event {
189- logger : DefaultLogger ,
190- level : level ,
191- metadata : make (map [string ]string ),
192- }
190+ event := newDefaultEventWithLevel (levels .LevelSilent )
191+ event .setLevelMetadata (levels .LevelSilent )
193192 return event
194193}
195194
196195// Print prints a string on stderr without any extra labels.
197196func Print () * Event {
198- level := levels .LevelInfo
199- event := & Event {
200- logger : DefaultLogger ,
201- level : level ,
202- metadata : make (map [string ]string ),
203- }
197+ event := newDefaultEventWithLevel (levels .LevelInfo )
204198 return event
205199}
206200
207201// Verbose prints a string only in verbose output mode.
208202func Verbose () * Event {
209- level := levels .LevelVerbose
210- event := & Event {
211- logger : DefaultLogger ,
212- level : level ,
213- metadata : make (map [string ]string ),
214- }
215- event .metadata ["label" ] = labels [level ]
203+ event := newDefaultEventWithLevel (levels .LevelVerbose )
204+ event .setLevelMetadata (levels .LevelVerbose )
216205 return event
217206}
218207
219208// Info writes a info message on the screen with the default label
220209func (l * Logger ) Info () * Event {
221- level := levels .LevelInfo
222- event := & Event {
223- logger : l ,
224- level : level ,
225- metadata : make (map [string ]string ),
226- }
227- event .metadata ["label" ] = labels [level ]
210+ event := newEventWithLevelAndLogger (levels .LevelInfo , l )
211+ event .setLevelMetadata (levels .LevelInfo )
228212 return event
229213}
230214
231215// Warning writes a warning message on the screen with the default label
232216func (l * Logger ) Warning () * Event {
233- level := levels .LevelWarning
234- event := & Event {
235- logger : l ,
236- level : level ,
237- metadata : make (map [string ]string ),
238- }
239- event .metadata ["label" ] = labels [level ]
217+ event := newEventWithLevelAndLogger (levels .LevelWarning , l )
218+ event .setLevelMetadata (levels .LevelWarning )
240219 return event
241220}
242221
243222// Error writes a error message on the screen with the default label
244223func (l * Logger ) Error () * Event {
245- level := levels .LevelError
246- event := & Event {
247- logger : l ,
248- level : level ,
249- metadata : make (map [string ]string ),
250- }
251- event .metadata ["label" ] = labels [level ]
224+ event := newEventWithLevelAndLogger (levels .LevelError , l )
225+ event .setLevelMetadata (levels .LevelError )
252226 return event
253227}
254228
255229// Debug writes an error message on the screen with the default label
256230func (l * Logger ) Debug () * Event {
257- level := levels .LevelDebug
258- event := & Event {
259- logger : l ,
260- level : level ,
261- metadata : make (map [string ]string ),
262- }
263- event .metadata ["label" ] = labels [level ]
231+ event := newEventWithLevelAndLogger (levels .LevelDebug , l )
232+ event .setLevelMetadata (levels .LevelDebug )
264233 return event
265234}
266235
267236// Fatal exits the program if we encounter a fatal error
268237func (l * Logger ) Fatal () * Event {
269- level := levels .LevelFatal
270- event := & Event {
271- logger : l ,
272- level : level ,
273- metadata : make (map [string ]string ),
274- }
275- event .metadata ["label" ] = labels [level ]
238+ event := newEventWithLevelAndLogger (levels .LevelFatal , l )
239+ event .setLevelMetadata (levels .LevelFatal )
276240 return event
277241}
278242
279243// Print prints a string on screen without any extra labels.
280244func (l * Logger ) Print () * Event {
281- level := levels .LevelSilent
282- event := & Event {
283- logger : l ,
284- level : level ,
285- metadata : make (map [string ]string ),
286- }
245+ event := newEventWithLevelAndLogger (levels .LevelSilent , l )
287246 return event
288247}
289248
290249// Verbose prints a string only in verbose output mode.
291250func (l * Logger ) Verbose () * Event {
292- level := levels .LevelVerbose
293- event := & Event {
294- logger : l ,
295- level : level ,
296- metadata : make (map [string ]string ),
297- }
298- event .metadata ["label" ] = labels [level ]
251+ event := newEventWithLevelAndLogger (levels .LevelVerbose , l )
252+ event .setLevelMetadata (levels .LevelVerbose )
299253 return event
300254}
301255
0 commit comments