| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2014-10-31 12:56:05 +01:00
										 |  |  | Package logger implements a multi-output leveled logger. | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-15 11:15:59 +02:00
										 |  |  | Other packages use tagged logger to send log messages to shared | 
					
						
							|  |  |  | (process-wide) logging engine. The shared logging engine dispatches to | 
					
						
							|  |  |  | multiple log systems. The log level can be set separately per log | 
					
						
							|  |  |  | system. | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-16 12:11:17 +02:00
										 |  |  | Logging is asynchronous and does not block the caller. Message | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | formatting is performed by the caller goroutine to avoid incorrect | 
					
						
							|  |  |  | logging of mutable state. | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2014-10-31 12:56:05 +01:00
										 |  |  | package logger | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2015-01-21 10:57:29 -06:00
										 |  |  | 	"encoding/json" | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"os" | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-21 10:18:46 -06:00
										 |  |  | type LogLevel uint32 | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | const ( | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | 	// Standard log levels | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | 	Silence LogLevel = iota | 
					
						
							|  |  |  | 	ErrorLevel | 
					
						
							|  |  |  | 	WarnLevel | 
					
						
							|  |  |  | 	InfoLevel | 
					
						
							|  |  |  | 	DebugLevel | 
					
						
							|  |  |  | 	DebugDetailLevel | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-15 11:15:59 +02:00
										 |  |  | // A Logger prints messages prefixed by a given tag. It provides named | 
					
						
							|  |  |  | // Printf and Println style methods for all loglevels. Each ethereum | 
					
						
							|  |  |  | // component should have its own logger with a unique prefix. | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | type Logger struct { | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | 	tag string | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func NewLogger(tag string) *Logger { | 
					
						
							| 
									
										
										
										
											2014-10-16 10:50:51 +02:00
										 |  |  | 	return &Logger{"[" + tag + "] "} | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | func (logger *Logger) Sendln(level LogLevel, v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-03-21 09:20:47 +00:00
										 |  |  | 	logMessageC <- stdMsg{level, logger.tag + fmt.Sprintln(v...)} | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | func (logger *Logger) Sendf(level LogLevel, format string, v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-03-21 09:20:47 +00:00
										 |  |  | 	logMessageC <- stdMsg{level, logger.tag + fmt.Sprintf(format, v...)} | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | // Errorln writes a message with ErrorLevel. | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | func (logger *Logger) Errorln(v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | 	logger.Sendln(ErrorLevel, v...) | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | // Warnln writes a message with WarnLevel. | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | func (logger *Logger) Warnln(v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | 	logger.Sendln(WarnLevel, v...) | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | // Infoln writes a message with InfoLevel. | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | func (logger *Logger) Infoln(v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | 	logger.Sendln(InfoLevel, v...) | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | // Debugln writes a message with DebugLevel. | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | func (logger *Logger) Debugln(v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | 	logger.Sendln(DebugLevel, v...) | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | // DebugDetailln writes a message with DebugDetailLevel. | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | func (logger *Logger) DebugDetailln(v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | 	logger.Sendln(DebugDetailLevel, v...) | 
					
						
							| 
									
										
										
										
											2014-06-25 16:37:38 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | // Errorf writes a message with ErrorLevel. | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | func (logger *Logger) Errorf(format string, v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | 	logger.Sendf(ErrorLevel, format, v...) | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | // Warnf writes a message with WarnLevel. | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | func (logger *Logger) Warnf(format string, v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | 	logger.Sendf(WarnLevel, format, v...) | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | // Infof writes a message with InfoLevel. | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | func (logger *Logger) Infof(format string, v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | 	logger.Sendf(InfoLevel, format, v...) | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | // Debugf writes a message with DebugLevel. | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | func (logger *Logger) Debugf(format string, v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | 	logger.Sendf(DebugLevel, format, v...) | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | // DebugDetailf writes a message with DebugDetailLevel. | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | func (logger *Logger) DebugDetailf(format string, v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | 	logger.Sendf(DebugDetailLevel, format, v...) | 
					
						
							| 
									
										
										
										
											2014-06-25 16:37:38 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | // Fatalln writes a message with ErrorLevel and exits the program. | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | func (logger *Logger) Fatalln(v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | 	logger.Sendln(ErrorLevel, v...) | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | 	Flush() | 
					
						
							|  |  |  | 	os.Exit(0) | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-14 19:35:10 +02:00
										 |  |  | // Fatalf writes a message with ErrorLevel and exits the program. | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | func (logger *Logger) Fatalf(format string, v ...interface{}) { | 
					
						
							| 
									
										
										
										
											2015-02-25 20:04:51 +07:00
										 |  |  | 	logger.Sendf(ErrorLevel, format, v...) | 
					
						
							| 
									
										
										
										
											2014-06-26 18:45:57 +01:00
										 |  |  | 	Flush() | 
					
						
							|  |  |  | 	os.Exit(0) | 
					
						
							| 
									
										
										
										
											2014-06-23 12:49:04 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-01-21 10:57:29 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-11 18:49:00 +01:00
										 |  |  | type JsonLogger struct { | 
					
						
							|  |  |  | 	Coinbase string | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-01-21 10:57:29 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | func NewJsonLogger() *JsonLogger { | 
					
						
							|  |  |  | 	return &JsonLogger{} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-11 18:49:00 +01:00
										 |  |  | func (logger *JsonLogger) LogJson(v JsonLog) { | 
					
						
							| 
									
										
										
										
											2015-02-11 12:45:41 +01:00
										 |  |  | 	msgname := v.EventName() | 
					
						
							| 
									
										
										
										
											2015-01-21 10:57:29 -06:00
										 |  |  | 	obj := map[string]interface{}{ | 
					
						
							| 
									
										
										
										
											2015-02-10 19:21:13 +01:00
										 |  |  | 		msgname: v, | 
					
						
							| 
									
										
										
										
											2015-01-21 10:57:29 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	jsontxt, _ := json.Marshal(obj) | 
					
						
							| 
									
										
										
										
											2015-03-21 09:20:47 +00:00
										 |  |  | 	logMessageC <- (jsonMsg(jsontxt)) | 
					
						
							| 
									
										
										
										
											2015-02-10 19:21:13 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-21 10:57:29 -06:00
										 |  |  | } |