simple_console_backend.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package hieda_yamlutil
  2. import (
  3. "fmt"
  4. "git.swzry.com/zry/GoHiedaLogger/hiedalog"
  5. "github.com/ttacon/chalk"
  6. "io"
  7. "strings"
  8. )
  9. type SimpleConsoleBackend struct {
  10. wr io.Writer
  11. s_fc_json_key func(string) string
  12. s_fc_json_val func(string) string
  13. s_lvd []func(string) string
  14. }
  15. func NewSimpleConsoleBackend(wr io.Writer) *SimpleConsoleBackend {
  16. scb := &SimpleConsoleBackend{
  17. wr: wr,
  18. s_fc_json_key: chalk.White.NewStyle().WithTextStyle(chalk.Bold).Style,
  19. s_fc_json_val: chalk.White.NewStyle().WithTextStyle(chalk.Italic).WithTextStyle(chalk.Underline).Style,
  20. s_lvd: []func(string) string{
  21. chalk.Red.NewStyle().WithTextStyle(chalk.Bold).WithTextStyle(chalk.Underline).Style,
  22. chalk.Red.NewStyle().WithTextStyle(chalk.Bold).Style,
  23. chalk.Red.NewStyle().Style,
  24. chalk.Yellow.NewStyle().Style,
  25. chalk.Green.NewStyle().Style,
  26. chalk.Cyan.NewStyle().Style,
  27. chalk.Blue.NewStyle().Style,
  28. },
  29. }
  30. return scb
  31. }
  32. func (b *SimpleConsoleBackend) EmitStringLog(module string, level hiedalog.HiedaLogLevel, content string) {
  33. var lv string
  34. if level.LevelNumber < 7 {
  35. lv = b.s_lvd[level.LevelNumber](level.Name)
  36. } else {
  37. lv = level.Name
  38. }
  39. _, _ = fmt.Fprintf(b.wr, "<%s> [%s] %s\n", lv, module, content)
  40. }
  41. func (b *SimpleConsoleBackend) EmitComplexLog(module string, level hiedalog.HiedaLogLevel, data map[string]string) {
  42. b.EmitStringLog(module, level, b.prettyComplexToString(data))
  43. }
  44. func (b *SimpleConsoleBackend) prettyComplexToString(data map[string]string) string {
  45. sb := strings.Builder{}
  46. scn := 0
  47. xr := false
  48. if len(data) < 5 {
  49. for k, v := range data {
  50. scn += len(k) + len(v) + 2
  51. if scn > 160 {
  52. xr = true
  53. break
  54. }
  55. sb.WriteString(b.s_fc_json_key(k))
  56. sb.WriteRune(':')
  57. sb.WriteString(b.s_fc_json_val(v))
  58. sb.WriteString(", ")
  59. }
  60. if !xr {
  61. so := sb.String()
  62. return so[:len(so)-2]
  63. }
  64. }
  65. sb = strings.Builder{}
  66. sb.WriteRune('\n')
  67. for k, v := range data {
  68. sb.WriteString(b.s_fc_json_key(k))
  69. sb.WriteRune(':')
  70. sb.WriteString(b.s_fc_json_val(v))
  71. sb.WriteRune('\n')
  72. }
  73. return sb.String()
  74. }