hiedabke_console.go 2.2 KB

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