-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathloggerdriver.go
98 lines (84 loc) · 2.1 KB
/
loggerdriver.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package logger
import (
"encoding/json"
"fmt"
"io"
"strings"
"github.com/gomig/utils"
)
type loggerDriver struct {
timeFormat string
formatter TimeFormatter
writers map[string]io.Writer
}
func (loggerDriver) err(format string, args ...any) error {
return utils.TaggedError([]string{"LoggerDriver"}, format, args...)
}
func (_logger loggerDriver) log() Log {
writers := make([]io.Writer, 0)
for _, w := range _logger.writers {
writers = append(writers, w)
}
return NewLog(_logger.timeFormat, _logger.formatter, "LOG", writers...)
}
func (_logger loggerDriver) Log() Log {
return _logger.log().Type("LOG")
}
func (_logger loggerDriver) Error() Log {
return _logger.log().Type("ERROR")
}
func (_logger loggerDriver) Warning() Log {
return _logger.log().Type("WARN")
}
func (_logger loggerDriver) Divider(divider string, count uint8, title string) error {
if title != "" {
title = " " + title + " "
}
if len(title)%2 != 0 {
title = title + " "
}
if count%2 != 0 {
count++
}
halfCount := int(count) - len(title)
if halfCount <= 0 {
halfCount = 2
} else {
halfCount = halfCount / 2
}
for _, writer := range _logger.writers {
_, err := writer.Write([]byte(strings.Repeat(divider, halfCount) + strings.ToUpper(title) + strings.Repeat(divider, halfCount) + "\n"))
if err != nil {
return _logger.err(err.Error())
}
}
return nil
}
func (_logger loggerDriver) Raw(format string, params ...any) error {
for _, writer := range _logger.writers {
_, err := writer.Write([]byte(fmt.Sprintf(format, params...)))
if err != nil {
return _logger.err(err.Error())
}
}
return nil
}
func (_logger loggerDriver) JSON(data any) error {
if _bytes, err := json.MarshalIndent(data, "", " "); err != nil {
return err
} else {
for _, writer := range _logger.writers {
_, err := writer.Write([]byte(string(_bytes)))
if err != nil {
return _logger.err(err.Error())
}
}
return nil
}
}
func (_logger *loggerDriver) AddWriter(name string, writer io.Writer) {
_logger.writers[name] = writer
}
func (_logger *loggerDriver) RemoveWriter(name string) {
delete(_logger.writers, name)
}