hiedalog.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package hiedalog
  2. import "fmt"
  3. type HiedaLogBackend interface {
  4. EmitStringLog(module string, level HiedaLogLevel, content string)
  5. EmitComplexLog(module string, level HiedaLogLevel, data map[string]string)
  6. }
  7. type HiedaLogBackendConfig struct {
  8. Backend HiedaLogBackend
  9. FilterLevelID uint8
  10. }
  11. type HiedaLogger struct {
  12. BackendConfigs []HiedaLogBackendConfig
  13. LevelFilter HiedaLogLevelFilter
  14. }
  15. func NewHiedaLogger() *HiedaLogger {
  16. hl := &HiedaLogger{
  17. BackendConfigs: make([]HiedaLogBackendConfig, 0),
  18. LevelFilter: NewDefaultLevelFilter(),
  19. }
  20. return hl
  21. }
  22. func (l *HiedaLogger) AddBackend(backend HiedaLogBackend, filterLevelID uint8) {
  23. l.BackendConfigs = append(l.BackendConfigs, HiedaLogBackendConfig{
  24. Backend: backend,
  25. FilterLevelID: filterLevelID,
  26. })
  27. }
  28. func (l *HiedaLogger) LogString(module, levelName, content string) {
  29. for _, v := range l.BackendConfigs {
  30. ce, lv := l.LevelFilter.CanEmitEx(levelName, v.FilterLevelID)
  31. if ce {
  32. v.Backend.EmitStringLog(module, lv, content)
  33. }
  34. }
  35. }
  36. func (l *HiedaLogger) LogComplex(module, levelName string, data map[string]string) {
  37. for _, v := range l.BackendConfigs {
  38. ce, lv := l.LevelFilter.CanEmitEx(levelName, v.FilterLevelID)
  39. if ce {
  40. v.Backend.EmitComplexLog(module, lv, data)
  41. }
  42. }
  43. }
  44. func (l *HiedaLogger) EmitStringLog(module string, level HiedaLogLevel, content string) {
  45. l.LogString(module, level.Name, content)
  46. }
  47. func (l *HiedaLogger) EmitComplexLog(module string, level HiedaLogLevel, data map[string]string) {
  48. l.LogComplex(module, level.Name, data)
  49. }
  50. func (l *HiedaLogger) LogPrint(module, level string, d ...interface{}) {
  51. s := fmt.Sprint(d...)
  52. l.LogString(module, level, s)
  53. }
  54. func (l *HiedaLogger) LogPrintf(module, level, format string, d ...interface{}) {
  55. s := fmt.Sprintf(format, d...)
  56. l.LogString(module, level, s)
  57. }