/
JSONLogger.go
95 lines (79 loc) · 2.06 KB
/
JSONLogger.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
/*
* Copyright (c) 2020. App Nerds LLC. All rights reserved
*/
package logging
import (
"fmt"
"log"
"strings"
"github.com/fatih/color"
)
/*
JSONLogger is a console logger that has a format of `{"applicationName": "{ApplicationName}", "type": "{Type}"", "message": "{Message}"}`
*/
type JSONLogger struct {
Logger
}
/*
NewJSONLogger returns an instance of an ILogger interface
set to the JSON logger format
*/
func NewJSONLogger(applicationName string, minimumLogLevel LogType) *JSONLogger {
return &JSONLogger{
Logger: Logger{
ApplicationName: applicationName,
LogLevel: minimumLogLevel,
colorEnabled: false,
logLevelInt: int(minimumLogLevel),
},
}
}
/*
Debugf writes a formatted debug entry to the log
*/
func (logger *JSONLogger) Debugf(message string, args ...interface{}) {
logger.writeLogf(DEBUG, message, args...)
}
/*
DisableColors turns of console coloring
*/
func (logger *JSONLogger) DisableColors() {
logger.colorEnabled = false
}
/*
EnableColors turns on console coloring
*/
func (logger *JSONLogger) EnableColors() {
logger.colorEnabled = true
}
/*
Errorf writes a formatted error entry to the log
*/
func (logger *JSONLogger) Errorf(message string, args ...interface{}) {
logger.writeLogf(ERROR, message, args...)
}
/*
Infof writes a formatted info entry to the log
*/
func (logger *JSONLogger) Infof(message string, args ...interface{}) {
logger.writeLogf(INFO, message, args...)
}
func (logger *JSONLogger) writeLogf(logType LogType, message string, args ...interface{}) {
logLevelInt := int(logType)
logColor := logType.Color()
if logger.colorEnabled {
color.Set(logColor)
}
if logLevelInt >= logger.logLevelInt {
log.SetPrefix("")
formattedMessage := fmt.Sprintf(message, args...)
formattedMessage = logger.escape(formattedMessage)
log.Printf(fmt.Sprintf(`{"applicationName": "%s", "type": "%s", "message": "%s"}`, logger.ApplicationName, logType.String(), formattedMessage))
}
if logger.colorEnabled {
color.Unset()
}
}
func (logger *JSONLogger) escape(s string) string {
return strings.Replace(s, "\"", "\\\"", -1)
}