github.com/sereiner/library@v0.0.0-20200518095232-1fa3e640cc5f/log/appender.file_test.go (about) 1 package log 2 3 import ( 4 "testing" 5 "time" 6 7 "os" 8 9 "bufio" 10 11 "io" 12 13 "strings" 14 15 "github.com/sereiner/library/file" 16 ) 17 18 // TestNewFailAppender 测试构建一个日志输出对象appender 19 func TestNewFailAppender(t *testing.T) { 20 // 创建日志输出对象,创建文件成功 21 path := "../logs/test.log" 22 layout := &Appender{Type: "file", Level: "All"} 23 _, err := NewFileAppender(path, layout) 24 if err != nil { 25 t.Errorf("test fail:%v", err) 26 } 27 28 // 创建日志输出对象,创建文件失败 29 path = "/root/test.log" 30 layout = &Appender{Type: "file", Level: "All"} 31 _, err = NewFileAppender(path, layout) 32 if err == nil { 33 t.Error("test fail") 34 } 35 } 36 37 // TestWrite 测试写日志到buffer 38 func TestWrite(t *testing.T) { 39 path := "../logs/test.log" 40 layout := &Appender{Type: "file", Level: "All"} 41 f, err := NewFileAppender(path, layout) 42 if err != nil { 43 t.Errorf("test fail:%v", err) 44 } 45 46 event := &LogEvent{Level: "All", Output: "output"} 47 f.Write(event) 48 49 // 不能写日志 50 f.Level = GetLevel("Off") 51 f.Write(event) 52 } 53 54 // TestWriteToFileAndReadCheck 测试写入buffer的内容和最后在文件中读取到的内容是否一致 55 func TestWriteToFileAndReadCheck(tx *testing.T) { 56 // 写入文件中 57 t, err := time.Parse("2006/01/02 15:04:05", "2016/11/28 16:38:27") 58 if err != nil { 59 tx.Errorf("test fail, %+v", err) 60 } 61 path := "../logs/20161128.log" 62 // layout := &Appender{Type: "file", Level: "All", Path: path} 63 layout := &Appender{Type: "file", Level: "All"} 64 fa, err := NewFileAppender(path, layout) 65 if err != nil { 66 tx.Errorf("test fail:%v", err) 67 } 68 69 events := []*LogEvent{ 70 &LogEvent{Level: "Debug", Now: t, Name: "test", Session: "12345678", Content: "content", Output: "output1"}, 71 &LogEvent{Level: "Debug", Now: t, Name: "test", Session: "12345678", Content: "content", Output: "output2"}, 72 &LogEvent{Level: "Info", Now: t, Name: "test", Session: "12345678", Content: "content", Output: "output3"}, 73 &LogEvent{Level: "Fatal", Now: t, Name: "test", Session: "12345678", Content: "content", Output: "output4"}, 74 &LogEvent{Level: "Error", Now: t, Name: "test", Session: "12345678", Content: "content", Output: "output5"}, 75 &LogEvent{Level: "Error", Now: t, Name: "test", Session: "12345678", Content: "content", Output: "output6"}, 76 } 77 for _, event := range events { 78 fa.Write(event) 79 } 80 fa.Close() 81 82 // 读取文件,进行校验 83 filePath, _ := file.GetAbs(path) 84 f, err := os.Open(filePath) 85 if err != nil { 86 tx.Errorf("test fail:%v", err) 87 } 88 defer f.Close() 89 rd := bufio.NewReader(f) 90 for { 91 line, err := rd.ReadString('\n') 92 if err != nil || io.EOF == err { 93 tx.Errorf("test fail: %v", err) 94 break 95 } 96 if strings.Contains(line, "output1output2output3output4output5output6") { 97 tx.Log("test success!") 98 break 99 } 100 } 101 102 // 删除文件 103 f.Close() 104 err = os.Remove(filePath) 105 if err != nil { 106 tx.Errorf("test fail:%v", err) 107 } 108 }