| 
									
										
										
										
											2017-02-20 17:39:36 +02:00
										 |  |  | package log | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"os" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var ( | 
					
						
							| 
									
										
										
										
											2017-02-23 18:42:42 +01:00
										 |  |  | 	root          = &logger{[]interface{}{}, new(swapHandler)} | 
					
						
							| 
									
										
										
										
											2017-02-20 17:39:36 +02:00
										 |  |  | 	StdoutHandler = StreamHandler(os.Stdout, LogfmtFormat()) | 
					
						
							|  |  |  | 	StderrHandler = StreamHandler(os.Stderr, LogfmtFormat()) | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func init() { | 
					
						
							| 
									
										
										
										
											2017-02-23 18:42:42 +01:00
										 |  |  | 	root.SetHandler(DiscardHandler()) | 
					
						
							| 
									
										
										
										
											2017-02-20 17:39:36 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // New returns a new logger with the given context. | 
					
						
							|  |  |  | // New is a convenient alias for Root().New | 
					
						
							|  |  |  | func New(ctx ...interface{}) Logger { | 
					
						
							|  |  |  | 	return root.New(ctx...) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Root returns the root logger | 
					
						
							|  |  |  | func Root() Logger { | 
					
						
							|  |  |  | 	return root | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // The following functions bypass the exported logger methods (logger.Debug, | 
					
						
							|  |  |  | // etc.) to keep the call depth the same for all paths to logger.write so | 
					
						
							|  |  |  | // runtime.Caller(2) always refers to the call site in client code. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-20 18:05:15 +02:00
										 |  |  | // Trace is a convenient alias for Root().Trace | 
					
						
							|  |  |  | func Trace(msg string, ctx ...interface{}) { | 
					
						
							| 
									
										
										
										
											2018-06-14 11:21:17 +02:00
										 |  |  | 	root.write(msg, LvlTrace, ctx, skipLevel) | 
					
						
							| 
									
										
										
										
											2017-02-20 18:05:15 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-20 17:39:36 +02:00
										 |  |  | // Debug is a convenient alias for Root().Debug | 
					
						
							|  |  |  | func Debug(msg string, ctx ...interface{}) { | 
					
						
							| 
									
										
										
										
											2018-06-14 11:21:17 +02:00
										 |  |  | 	root.write(msg, LvlDebug, ctx, skipLevel) | 
					
						
							| 
									
										
										
										
											2017-02-20 17:39:36 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Info is a convenient alias for Root().Info | 
					
						
							|  |  |  | func Info(msg string, ctx ...interface{}) { | 
					
						
							| 
									
										
										
										
											2018-06-14 11:21:17 +02:00
										 |  |  | 	root.write(msg, LvlInfo, ctx, skipLevel) | 
					
						
							| 
									
										
										
										
											2017-02-20 17:39:36 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Warn is a convenient alias for Root().Warn | 
					
						
							|  |  |  | func Warn(msg string, ctx ...interface{}) { | 
					
						
							| 
									
										
										
										
											2018-06-14 11:21:17 +02:00
										 |  |  | 	root.write(msg, LvlWarn, ctx, skipLevel) | 
					
						
							| 
									
										
										
										
											2017-02-20 17:39:36 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Error is a convenient alias for Root().Error | 
					
						
							|  |  |  | func Error(msg string, ctx ...interface{}) { | 
					
						
							| 
									
										
										
										
											2018-06-14 11:21:17 +02:00
										 |  |  | 	root.write(msg, LvlError, ctx, skipLevel) | 
					
						
							| 
									
										
										
										
											2017-02-20 17:39:36 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Crit is a convenient alias for Root().Crit | 
					
						
							|  |  |  | func Crit(msg string, ctx ...interface{}) { | 
					
						
							| 
									
										
										
										
											2018-06-14 11:21:17 +02:00
										 |  |  | 	root.write(msg, LvlCrit, ctx, skipLevel) | 
					
						
							| 
									
										
										
										
											2017-02-20 18:05:15 +02:00
										 |  |  | 	os.Exit(1) | 
					
						
							| 
									
										
										
										
											2017-02-20 17:39:36 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2018-06-14 11:21:17 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Output is a convenient alias for write, allowing for the modification of | 
					
						
							|  |  |  | // the calldepth (number of stack frames to skip). | 
					
						
							|  |  |  | // calldepth influences the reported line number of the log message. | 
					
						
							|  |  |  | // A calldepth of zero reports the immediate caller of Output. | 
					
						
							|  |  |  | // Non-zero calldepth skips as many stack frames. | 
					
						
							|  |  |  | func Output(msg string, lvl Lvl, calldepth int, ctx ...interface{}) { | 
					
						
							|  |  |  | 	root.write(msg, lvl, ctx, calldepth+skipLevel) | 
					
						
							|  |  |  | } |