aboutsummaryrefslogtreecommitdiffstats
path: root/ethlog/loggers_test.go
diff options
context:
space:
mode:
authorzelig <viktor.tron@gmail.com>2014-06-23 19:49:04 +0800
committerzelig <viktor.tron@gmail.com>2014-06-23 19:49:04 +0800
commit8e9cc3697944c3e568186a5c23ac729f6eb4a1f4 (patch)
tree96f3b55f7496a2889e0efa302fb03dfd81d5592c /ethlog/loggers_test.go
parent0251fae5ccf6984c558d59cd2b36ef89116c061e (diff)
downloaddexon-8e9cc3697944c3e568186a5c23ac729f6eb4a1f4.tar
dexon-8e9cc3697944c3e568186a5c23ac729f6eb4a1f4.tar.gz
dexon-8e9cc3697944c3e568186a5c23ac729f6eb4a1f4.tar.bz2
dexon-8e9cc3697944c3e568186a5c23ac729f6eb4a1f4.tar.lz
dexon-8e9cc3697944c3e568186a5c23ac729f6eb4a1f4.tar.xz
dexon-8e9cc3697944c3e568186a5c23ac729f6eb4a1f4.tar.zst
dexon-8e9cc3697944c3e568186a5c23ac729f6eb4a1f4.zip
refactor logging. Details:
- packages use tagged logger sending log messages to shared (process-wide) logging engine - log writers (interface ethlog.LogSystem) can be added to the logging engine by wrappers/guis/clients - shared logging engine dispatching to multiple log systems - log level can be set separately per log system - async logging thread: logging IO does not block main thread - log messages are synchronously stringified to avoid incorrectly logging of changed states - README.md - loggers_test
Diffstat (limited to 'ethlog/loggers_test.go')
-rw-r--r--ethlog/loggers_test.go115
1 files changed, 115 insertions, 0 deletions
diff --git a/ethlog/loggers_test.go b/ethlog/loggers_test.go
new file mode 100644
index 000000000..c33082012
--- /dev/null
+++ b/ethlog/loggers_test.go
@@ -0,0 +1,115 @@
+package ethlog
+
+import (
+ "testing"
+ "fmt"
+ "io/ioutil"
+ "os"
+)
+
+type TestLogSystem struct {
+ Output string
+ level LogLevel
+}
+
+func (t *TestLogSystem) Println(v ...interface{}) {
+ t.Output += fmt.Sprintln(v...)
+}
+
+func (t *TestLogSystem) Printf(format string, v ...interface{}) {
+ t.Output += fmt.Sprintf(format, v...)
+}
+
+func (t *TestLogSystem) SetLogLevel(i LogLevel) {
+ t.level = i
+}
+
+func (t *TestLogSystem) GetLogLevel() LogLevel {
+ return t.level
+}
+
+func quote(s string) string {
+ return fmt.Sprintf("'%s'", s)
+}
+
+func TestLoggerPrintln(t *testing.T) {
+ logger := NewLogger("TEST")
+ testLogSystem := &TestLogSystem{level: WarnLevel}
+ AddLogSystem(testLogSystem)
+ logger.Errorln("error")
+ logger.Warnln("warn")
+ logger.Infoln("info")
+ logger.Debugln("debug")
+ Flush()
+ output := testLogSystem.Output
+ fmt.Println(quote(output))
+ if output != "[TEST] error\n[TEST] warn\n" {
+ t.Error("Expected logger output '[TEST] error\\n[TEST] warn\\n', got ", quote(testLogSystem.Output))
+ }
+}
+
+func TestLoggerPrintf(t *testing.T) {
+ logger := NewLogger("TEST")
+ testLogSystem := &TestLogSystem{level: WarnLevel}
+ AddLogSystem(testLogSystem)
+ logger.Errorf("error to %v\n", *testLogSystem)
+ logger.Warnf("warn")
+ logger.Infof("info")
+ logger.Debugf("debug")
+ Flush()
+ output := testLogSystem.Output
+ fmt.Println(quote(output))
+ if output != "[TEST] error to { 2}\n[TEST] warn" {
+ t.Error("Expected logger output '[TEST] error to { 2}\\n[TEST] warn', got ", quote(testLogSystem.Output))
+ }
+}
+
+func TestMultipleLogSystems(t *testing.T) {
+ logger := NewLogger("TEST")
+ testLogSystem0 := &TestLogSystem{level: ErrorLevel}
+ testLogSystem1 := &TestLogSystem{level: WarnLevel}
+ AddLogSystem(testLogSystem0)
+ AddLogSystem(testLogSystem1)
+ logger.Errorln("error")
+ logger.Warnln("warn")
+ Flush()
+ output0 := testLogSystem0.Output
+ output1 := testLogSystem1.Output
+ if output0 != "[TEST] error\n" {
+ t.Error("Expected logger 0 output '[TEST] error\\n', got ", quote(testLogSystem0.Output))
+ }
+ if output1 != "[TEST] error\n[TEST] warn\n" {
+ t.Error("Expected logger 1 output '[TEST] error\\n[TEST] warn\\n', got ", quote(testLogSystem1.Output))
+ }
+}
+
+func TestFileLogSystem(t *testing.T) {
+ logger := NewLogger("TEST")
+ filename := "test.log"
+ file, _ := os.OpenFile(filename, os.O_RDWR|os.O_CREATE, os.ModePerm)
+ testLogSystem := NewStdLogSystem(file, 0, WarnLevel)
+ AddLogSystem(testLogSystem)
+ logger.Errorf("error to %s\n", filename)
+ logger.Warnln("warn")
+ Flush()
+ contents, _ := ioutil.ReadFile(filename)
+ output := string(contents)
+ fmt.Println(quote(output))
+ if output != "[TEST] error to test.log\n[TEST] warn\n" {
+ t.Error("Expected contents of file 'test.log': '[TEST] error to test.log\\n[TEST] warn\\n', got ", quote(output))
+ } else {
+ os.Remove(filename)
+ }
+}
+
+func TestNoLogSystem(t *testing.T) {
+ logger := NewLogger("TEST")
+ logger.Warnln("warn")
+ Flush()
+}
+
+
+
+
+
+