package hiedalog import "fmt" type HiedaLogBackend interface { EmitStringLog(module string, level HiedaLogLevel, content string) EmitComplexLog(module string, level HiedaLogLevel, data map[string]string) } type HiedaLogBackendConfig struct { Backend HiedaLogBackend FilterLevelID uint8 } type HiedaLogger struct { BackendConfigs []HiedaLogBackendConfig LevelFilter HiedaLogLevelFilter } func NewHiedaLogger() *HiedaLogger { hl := &HiedaLogger{ BackendConfigs: make([]HiedaLogBackendConfig, 0), LevelFilter: NewDefaultLevelFilter(), } return hl } func (l *HiedaLogger) AddBackend(backend HiedaLogBackend, filterLevelID uint8) { l.BackendConfigs = append(l.BackendConfigs, HiedaLogBackendConfig{ Backend: backend, FilterLevelID: filterLevelID, }) } func (l *HiedaLogger) LogString(module, levelName, content string) { for _, v := range l.BackendConfigs { ce, lv := l.LevelFilter.CanEmitEx(levelName, v.FilterLevelID) if ce { v.Backend.EmitStringLog(module, lv, content) } } } func (l *HiedaLogger) LogComplex(module, levelName string, data map[string]string) { for _, v := range l.BackendConfigs { ce, lv := l.LevelFilter.CanEmitEx(levelName, v.FilterLevelID) if ce { v.Backend.EmitComplexLog(module, lv, data) } } } func (l *HiedaLogger) EmitStringLog(module string, level HiedaLogLevel, content string) { l.LogString(module, level.Name, content) } func (l *HiedaLogger) EmitComplexLog(module string, level HiedaLogLevel, data map[string]string) { l.LogComplex(module, level.Name, data) } func (l *HiedaLogger) LogPrint(module, level string, d ...interface{}) { s := fmt.Sprint(d...) l.LogString(module, level, s) } func (l *HiedaLogger) LogPrintf(module, level, format string, d ...interface{}) { s := fmt.Sprintf(format, d...) l.LogString(module, level, s) }