Skip to content

Commit ab5a843

Browse files
committed
Changed the <severety>j loggers to take a log.Field() func
Because then it can handle an infinite amount of fields, not just one object.
1 parent ffc22ad commit ab5a843

File tree

2 files changed

+61
-44
lines changed

2 files changed

+61
-44
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ func init() {
2424
func main() {
2525
log.Info("Hello", "world")
2626
log.Infof("Hello %s", "world")
27-
log.Infoj("label", struct{ Hello string }{"world"})
27+
log.Infoj("label", log.Field("struct", struct{ Hello string }{"world"}))
2828
}
2929
```

main.go

Lines changed: 60 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -54,102 +54,111 @@ func setPrefixPath() {
5454
}
5555

5656
func (l *Logger) Debug(v ...interface{}) {
57-
l.writeLog(debug_severety, strings.TrimSpace(fmt.Sprintln(v...)), nil)
57+
l.writeLog(debug_severety, strings.TrimSpace(fmt.Sprintln(v...)))
5858
}
5959

6060
func (l *Logger) Info(v ...interface{}) {
61-
l.writeLog(info_severety, strings.TrimSpace(fmt.Sprintln(v...)), nil)
61+
l.writeLog(info_severety, strings.TrimSpace(fmt.Sprintln(v...)))
6262
}
6363

6464
func (l *Logger) Notice(v ...interface{}) {
65-
l.writeLog(notice_severety, strings.TrimSpace(fmt.Sprintln(v...)), nil)
65+
l.writeLog(notice_severety, strings.TrimSpace(fmt.Sprintln(v...)))
6666
}
6767

6868
func (l *Logger) Warning(v ...interface{}) {
69-
l.writeLog(warning_severety, strings.TrimSpace(fmt.Sprintln(v...)), nil)
69+
l.writeLog(warning_severety, strings.TrimSpace(fmt.Sprintln(v...)))
7070
}
7171

7272
func (l *Logger) Error(v ...interface{}) {
73-
l.writeLog(error_severety, strings.TrimSpace(fmt.Sprintln(v...)), nil)
73+
l.writeLog(error_severety, strings.TrimSpace(fmt.Sprintln(v...)))
7474
}
7575

7676
func (l *Logger) Critical(v ...interface{}) {
77-
l.writeLog(critical_severety, strings.TrimSpace(fmt.Sprintln(v...)), nil)
77+
l.writeLog(critical_severety, strings.TrimSpace(fmt.Sprintln(v...)))
7878
}
7979

8080
func (l *Logger) Alert(v ...interface{}) {
81-
l.writeLog(alert_severety, strings.TrimSpace(fmt.Sprintln(v...)), nil)
81+
l.writeLog(alert_severety, strings.TrimSpace(fmt.Sprintln(v...)))
8282
}
8383

8484
func (l *Logger) Emergency(v ...interface{}) {
85-
l.writeLog(emergency_severety, strings.TrimSpace(fmt.Sprintln(v...)), nil)
85+
l.writeLog(emergency_severety, strings.TrimSpace(fmt.Sprintln(v...)))
8686
}
8787

8888
func (l *Logger) Debugf(format string, v ...interface{}) {
89-
l.writeLog(debug_severety, fmt.Sprintf(format, v...), nil)
89+
l.writeLog(debug_severety, fmt.Sprintf(format, v...))
9090
}
9191

9292
func (l *Logger) Infof(format string, v ...interface{}) {
93-
l.writeLog(info_severety, fmt.Sprintf(format, v...), nil)
93+
l.writeLog(info_severety, fmt.Sprintf(format, v...))
9494
}
9595

9696
func (l *Logger) Noticef(format string, v ...interface{}) {
97-
l.writeLog(notice_severety, fmt.Sprintf(format, v...), nil)
97+
l.writeLog(notice_severety, fmt.Sprintf(format, v...))
9898
}
9999

100100
func (l *Logger) Warningf(format string, v ...interface{}) {
101-
l.writeLog(warning_severety, fmt.Sprintf(format, v...), nil)
101+
l.writeLog(warning_severety, fmt.Sprintf(format, v...))
102102
}
103103

104104
func (l *Logger) Errorf(format string, v ...interface{}) {
105-
l.writeLog(error_severety, fmt.Sprintf(format, v...), nil)
105+
l.writeLog(error_severety, fmt.Sprintf(format, v...))
106106
}
107107

108108
func (l *Logger) Criticalf(format string, v ...interface{}) {
109-
l.writeLog(critical_severety, fmt.Sprintf(format, v...), nil)
109+
l.writeLog(critical_severety, fmt.Sprintf(format, v...))
110110
}
111111

112112
func (l *Logger) Alertf(format string, v ...interface{}) {
113-
l.writeLog(alert_severety, fmt.Sprintf(format, v...), nil)
113+
l.writeLog(alert_severety, fmt.Sprintf(format, v...))
114114
}
115115

116116
func (l *Logger) Emergencyf(format string, v ...interface{}) {
117-
l.writeLog(emergency_severety, fmt.Sprintf(format, v...), nil)
117+
l.writeLog(emergency_severety, fmt.Sprintf(format, v...))
118118
}
119119

120-
func (l *Logger) Debugj(message string, obj interface{}) {
121-
l.writeLog(debug_severety, message, obj)
120+
type Field struct {
121+
Key string
122+
Value interface{}
122123
}
123124

124-
func (l *Logger) Infoj(message string, obj interface{}) {
125-
l.writeLog(info_severety, message, obj)
125+
func (l *Logger) Field(key string, field interface{}) *Field {
126+
return &Field{key, field}
126127
}
127128

128-
func (l *Logger) Noticej(message string, obj interface{}) {
129-
l.writeLog(notice_severety, message, obj)
129+
func (l *Logger) Debugj(message string, fields ...*Field) {
130+
l.writeLog(debug_severety, message, fields...)
130131
}
131132

132-
func (l *Logger) Warningj(message string, obj interface{}) {
133-
l.writeLog(warning_severety, message, obj)
133+
func (l *Logger) Infoj(message string, fields ...*Field) {
134+
l.writeLog(info_severety, message, fields...)
134135
}
135136

136-
func (l *Logger) Errorj(message string, obj interface{}) {
137-
l.writeLog(error_severety, message, obj)
137+
func (l *Logger) Noticej(message string, fields ...*Field) {
138+
l.writeLog(notice_severety, message, fields...)
138139
}
139140

140-
func (l *Logger) Criticalj(message string, obj interface{}) {
141-
l.writeLog(critical_severety, message, obj)
141+
func (l *Logger) Warningj(message string, fields ...*Field) {
142+
l.writeLog(warning_severety, message, fields...)
142143
}
143144

144-
func (l *Logger) Alertj(message string, obj interface{}) {
145-
l.writeLog(alert_severety, message, obj)
145+
func (l *Logger) Errorj(message string, fields ...*Field) {
146+
l.writeLog(error_severety, message, fields...)
146147
}
147148

148-
func (l *Logger) Emergencyj(message string, obj interface{}) {
149-
l.writeLog(emergency_severety, message, obj)
149+
func (l *Logger) Criticalj(message string, fields ...*Field) {
150+
l.writeLog(critical_severety, message, fields...)
150151
}
151152

152-
func (l *Logger) writeLog(severety severety, message string, obj interface{}) {
153+
func (l *Logger) Alertj(message string, fields ...*Field) {
154+
l.writeLog(alert_severety, message, fields...)
155+
}
156+
157+
func (l *Logger) Emergencyj(message string, fields ...*Field) {
158+
l.writeLog(emergency_severety, message, fields...)
159+
}
160+
161+
func (l *Logger) writeLog(severety severety, message string, fields ...*Field) {
153162
output := os.Stderr
154163

155164
var isError bool
@@ -161,8 +170,8 @@ func (l *Logger) writeLog(severety severety, message string, obj interface{}) {
161170
pc, file, line, _ := runtime.Caller(2)
162171

163172
if l == nil {
164-
if obj != nil {
165-
j, _ := json.Marshal(obj)
173+
if len(fields) > 0 {
174+
j, _ := json.Marshal(fields)
166175
fmt.Fprintf(
167176
output,
168177
"%s in [%s:%d]: %s\n%s\n",
@@ -199,8 +208,16 @@ func (l *Logger) writeLog(severety severety, message string, obj interface{}) {
199208
}
200209
}
201210

211+
jPayload := map[string]interface{}{}
212+
for _, field := range fields {
213+
if field.Key == "message" {
214+
field.Key = "_message_" // this is to prevent the main message from beeing overwritten
215+
}
216+
jPayload[field.Key] = field.Value
217+
}
218+
202219
payload := &stackdriverLogStruct{
203-
JsonPayload: obj,
220+
JsonPayload: jPayload,
204221
Message: message,
205222
Severity: severety,
206223
Timestamp: time.Now(),
@@ -233,13 +250,13 @@ func relative(path string) string {
233250

234251
// stackdriverLogStruct source https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry
235252
type stackdriverLogStruct struct {
236-
Message string `json:"message"`
237-
JsonPayload interface{} `json:"jsonPayload,omitempty"`
238-
Severity severety `json:"severity"`
239-
Timestamp time.Time `json:"timestamp"`
240-
SourceLocation *sourceLocation `json:"logging.googleapis.com/sourceLocation"`
241-
Type *string `json:"@type,omitempty"`
242-
ServiceContext *ServiceContext `json:"serviceContext,omitempty"`
253+
Message string `json:"message"`
254+
JsonPayload map[string]interface{} `json:"jsonPayload,omitempty"`
255+
Severity severety `json:"severity"`
256+
Timestamp time.Time `json:"timestamp"`
257+
SourceLocation *sourceLocation `json:"logging.googleapis.com/sourceLocation"`
258+
Type *string `json:"@type,omitempty"`
259+
ServiceContext *ServiceContext `json:"serviceContext,omitempty"`
243260
}
244261
type ServiceContext struct {
245262
Service string `json:"service"`

0 commit comments

Comments
 (0)