|
@@ -0,0 +1,80 @@
|
|
|
+package hieda_yamlutil
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "git.swzry.com/zry/GoHiedaLogger/hiedalog"
|
|
|
+ "github.com/ttacon/chalk"
|
|
|
+ "io"
|
|
|
+ "strings"
|
|
|
+)
|
|
|
+
|
|
|
+type ConsoleBackend struct {
|
|
|
+ wr io.Writer
|
|
|
+ s_fc_json_key func(string) string
|
|
|
+ s_fc_json_val func(string) string
|
|
|
+ s_lvd []func(string) string
|
|
|
+}
|
|
|
+
|
|
|
+func NewConsoleBackend(wr io.Writer) *ConsoleBackend {
|
|
|
+ scb := &ConsoleBackend{
|
|
|
+ wr: wr,
|
|
|
+ s_fc_json_key: chalk.White.NewStyle().WithTextStyle(chalk.Bold).Style,
|
|
|
+ s_fc_json_val: chalk.White.NewStyle().WithTextStyle(chalk.Italic).WithTextStyle(chalk.Underline).Style,
|
|
|
+ s_lvd: []func(string) string{
|
|
|
+ chalk.Red.NewStyle().WithTextStyle(chalk.Bold).WithTextStyle(chalk.Underline).Style,
|
|
|
+ chalk.Red.NewStyle().WithTextStyle(chalk.Bold).Style,
|
|
|
+ chalk.Red.NewStyle().Style,
|
|
|
+ chalk.Yellow.NewStyle().Style,
|
|
|
+ chalk.Green.NewStyle().Style,
|
|
|
+ chalk.Cyan.NewStyle().Style,
|
|
|
+ chalk.Blue.NewStyle().Style,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ return scb
|
|
|
+}
|
|
|
+
|
|
|
+func (b *ConsoleBackend) EmitStringLog(module string, level hiedalog.HiedaLogLevel, content string) {
|
|
|
+ var lv string
|
|
|
+ if level.LevelNumber < 7 {
|
|
|
+ lv = b.s_lvd[level.LevelNumber](level.Name)
|
|
|
+ } else {
|
|
|
+ lv = level.Name
|
|
|
+ }
|
|
|
+ _, _ = fmt.Fprintf(b.wr, "<%s> [%s] %s\n", lv, module, content)
|
|
|
+}
|
|
|
+
|
|
|
+func (b *ConsoleBackend) EmitComplexLog(module string, level hiedalog.HiedaLogLevel, data map[string]string) {
|
|
|
+ b.EmitStringLog(module, level, b.prettyComplexToString(data))
|
|
|
+}
|
|
|
+
|
|
|
+func (b *ConsoleBackend) prettyComplexToString(data map[string]string) string {
|
|
|
+ sb := strings.Builder{}
|
|
|
+ scn := 0
|
|
|
+ xr := false
|
|
|
+ if len(data) < 5 {
|
|
|
+ for k, v := range data {
|
|
|
+ scn += len(k) + len(v) + 2
|
|
|
+ if scn > 160 {
|
|
|
+ xr = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ sb.WriteString(b.s_fc_json_key(k))
|
|
|
+ sb.WriteRune(':')
|
|
|
+ sb.WriteString(b.s_fc_json_val(v))
|
|
|
+ sb.WriteString(", ")
|
|
|
+ }
|
|
|
+ if !xr {
|
|
|
+ so := sb.String()
|
|
|
+ return so[:len(so)-2]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sb = strings.Builder{}
|
|
|
+ sb.WriteRune('\n')
|
|
|
+ for k, v := range data {
|
|
|
+ sb.WriteString(b.s_fc_json_key(k))
|
|
|
+ sb.WriteRune(':')
|
|
|
+ sb.WriteString(b.s_fc_json_val(v))
|
|
|
+ sb.WriteRune('\n')
|
|
|
+ }
|
|
|
+ return sb.String()
|
|
|
+}
|