aboutsummaryrefslogtreecommitdiffstats
path: root/logger/loggers.go
diff options
context:
space:
mode:
Diffstat (limited to 'logger/loggers.go')
-rw-r--r--logger/loggers.go134
1 files changed, 134 insertions, 0 deletions
diff --git a/logger/loggers.go b/logger/loggers.go
new file mode 100644
index 000000000..25263853a
--- /dev/null
+++ b/logger/loggers.go
@@ -0,0 +1,134 @@
+/*
+Package logger implements a multi-output leveled logger.
+
+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.
+
+Logging is asynchronous and does not block the caller. Message
+formatting is performed by the caller goroutine to avoid incorrect
+logging of mutable state.
+*/
+package logger
+
+import (
+ "encoding/json"
+ "fmt"
+ "os"
+)
+
+type LogLevel uint32
+
+const (
+ // Standard log levels
+ Silence LogLevel = iota
+ ErrorLevel
+ WarnLevel
+ InfoLevel
+ DebugLevel
+ DebugDetailLevel
+ JsonLevel = 1000
+)
+
+// 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.
+type Logger struct {
+ tag string
+}
+
+func NewLogger(tag string) *Logger {
+ return &Logger{"[" + tag + "] "}
+}
+
+func (logger *Logger) Sendln(level LogLevel, v ...interface{}) {
+ logMessageC <- message{level, logger.tag + fmt.Sprintln(v...)}
+}
+
+func (logger *Logger) Sendf(level LogLevel, format string, v ...interface{}) {
+ logMessageC <- message{level, logger.tag + fmt.Sprintf(format, v...)}
+}
+
+// Errorln writes a message with ErrorLevel.
+func (logger *Logger) Errorln(v ...interface{}) {
+ logger.Sendln(ErrorLevel, v...)
+}
+
+// Warnln writes a message with WarnLevel.
+func (logger *Logger) Warnln(v ...interface{}) {
+ logger.Sendln(WarnLevel, v...)
+}
+
+// Infoln writes a message with InfoLevel.
+func (logger *Logger) Infoln(v ...interface{}) {
+ logger.Sendln(InfoLevel, v...)
+}
+
+// Debugln writes a message with DebugLevel.
+func (logger *Logger) Debugln(v ...interface{}) {
+ logger.Sendln(DebugLevel, v...)
+}
+
+// DebugDetailln writes a message with DebugDetailLevel.
+func (logger *Logger) DebugDetailln(v ...interface{}) {
+ logger.Sendln(DebugDetailLevel, v...)
+}
+
+// Errorf writes a message with ErrorLevel.
+func (logger *Logger) Errorf(format string, v ...interface{}) {
+ logger.Sendf(ErrorLevel, format, v...)
+}
+
+// Warnf writes a message with WarnLevel.
+func (logger *Logger) Warnf(format string, v ...interface{}) {
+ logger.Sendf(WarnLevel, format, v...)
+}
+
+// Infof writes a message with InfoLevel.
+func (logger *Logger) Infof(format string, v ...interface{}) {
+ logger.Sendf(InfoLevel, format, v...)
+}
+
+// Debugf writes a message with DebugLevel.
+func (logger *Logger) Debugf(format string, v ...interface{}) {
+ logger.Sendf(DebugLevel, format, v...)
+}
+
+// DebugDetailf writes a message with DebugDetailLevel.
+func (logger *Logger) DebugDetailf(format string, v ...interface{}) {
+ logger.Sendf(DebugDetailLevel, format, v...)
+}
+
+// Fatalln writes a message with ErrorLevel and exits the program.
+func (logger *Logger) Fatalln(v ...interface{}) {
+ logger.Sendln(ErrorLevel, v...)
+ Flush()
+ os.Exit(0)
+}
+
+// Fatalf writes a message with ErrorLevel and exits the program.
+func (logger *Logger) Fatalf(format string, v ...interface{}) {
+ logger.Sendf(ErrorLevel, format, v...)
+ Flush()
+ os.Exit(0)
+}
+
+type JsonLogger struct {
+ Coinbase string
+}
+
+func NewJsonLogger() *JsonLogger {
+ return &JsonLogger{}
+}
+
+func (logger *JsonLogger) LogJson(v JsonLog) {
+ msgname := v.EventName()
+ obj := map[string]interface{}{
+ msgname: v,
+ }
+
+ jsontxt, _ := json.Marshal(obj)
+ logMessageC <- message{JsonLevel, string(jsontxt)}
+
+}