-
Notifications
You must be signed in to change notification settings - Fork 2
/
plainFormatter.go
59 lines (48 loc) · 1.61 KB
/
plainFormatter.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
package logger
import "fmt"
// PlainFormatter implements formatter interface and is used to format log lines to be written in the same form
// as ConsoleFormatter but it doesn't use the ANSI colors (useful when writing to a file, for example)
type PlainFormatter struct {
}
// Output converts the provided LogLineHandler into a slice of bytes ready for output
func (pf *PlainFormatter) Output(line LogLineHandler) []byte {
if line == nil {
return nil
}
level := LogLevel(line.GetLogLevel())
timestamp := displayTime(line.GetTimestamp())
loggerName := ""
correlation := ""
message := formatMessage(line.GetMessage())
args := formatArgsNoAnsi(line.GetArgs()...)
if IsEnabledLoggerName() {
loggerName = formatLoggerName(line.GetLoggerName())
}
if IsEnabledCorrelation() {
correlation = formatCorrelationElements(line.GetCorrelation())
}
return []byte(
fmt.Sprintf(formatPlainString,
level,
timestamp, loggerName, correlation,
message, args,
),
)
}
// formatArgsNoAnsi iterates through the provided arguments displaying the argument name and after that its value
// The arguments must be provided in the following format: "name1", "val1", "name2", "val2" ...
// It ignores odd number of arguments and it does not use ANSI colors
func formatArgsNoAnsi(args ...string) string {
if len(args) == 0 {
return ""
}
argString := ""
for index := 1; index < len(args); index += 2 {
argString += fmt.Sprintf("%s = %s ", args[index-1], args[index])
}
return argString
}
// IsInterfaceNil returns true if there is no value under the interface
func (pf *PlainFormatter) IsInterfaceNil() bool {
return pf == nil
}