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  }