github.com/sereiner/library@v0.0.0-20200518095232-1fa3e640cc5f/log/appender.factory_test.go (about) 1 package log 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 type testLoggerAppenderFactory struct { 9 } 10 11 func (f *testLoggerAppenderFactory) MakeAppender(l *Appender, event *LogEvent) (IAppender, error) { 12 switch strings.ToLower(l.Type) { 13 case appender_file: 14 appender, _ := NewFileAppender(f.MakeUniq(l, event), l) 15 appender.file = &TestWriteCloser{} 16 return appender, nil 17 case appender_stdout: 18 return NewStudoutAppender(f.MakeUniq(l, event), l) 19 } 20 return nil, fmt.Errorf("不支持的日志类型:%s", l.Type) 21 } 22 23 func (f *testLoggerAppenderFactory) MakeUniq(l *Appender, event *LogEvent) string { 24 switch strings.ToLower(l.Type) { 25 case appender_file: 26 return transform(l.Path, event) 27 } 28 return l.Type 29 } 30 31 // 重写io.WriteCloser里面的方法,以方便测试 32 type TestWriteCloser struct { 33 } 34 35 func (f *TestWriteCloser) Write(p []byte) (n int, err error) { 36 content := string(p) 37 if strings.Contains(content, "[d]") { 38 count := strings.Count(content, "[d]") 39 SetResult("debug", count) 40 } 41 if strings.Contains(content, "[i]") { 42 count := strings.Count(content, "[i]") 43 SetResult("info", count) 44 } 45 if strings.Contains(content, "[f]") { 46 count := strings.Count(content, "[f]") 47 SetResult("fatal", count) 48 } 49 if strings.Contains(content, "[e]") { 50 count := strings.Count(content, "[e]") 51 SetResult("error", count) 52 } 53 54 return len(p), nil 55 } 56 57 func (f *TestWriteCloser) Close() error { 58 return nil 59 }