This repository has been archived by the owner on Jul 29, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 13
/
lager_adapter.go
87 lines (70 loc) · 2.32 KB
/
lager_adapter.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
/*
* Portions Copyright (c) 2017,2018, F5 Networks, Inc.
*/
package logger
import (
"fmt"
"code.cloudfoundry.org/lager"
"github.com/uber-go/zap"
)
// LagerAdapter satisfies the lager.Logger interface with zap as the
// implementation.
type LagerAdapter struct {
originalLogger Logger
}
// NewLagerAdapter returns a new lager.Logger that uses zap underneath.
func NewLagerAdapter(zapLogger Logger) *LagerAdapter {
return &LagerAdapter{
originalLogger: zapLogger,
}
}
// RegisterSink is never used after initialization, so it does nothing.
func (l *LagerAdapter) RegisterSink(_ lager.Sink) {}
// Session returns a new logger with a nested session.
func (l *LagerAdapter) Session(task string, data ...lager.Data) lager.Logger {
tmpLogger := l.originalLogger.Session(task)
if data != nil {
tmpLogger = l.originalLogger.With(dataToFields(data)...)
}
return &LagerAdapter{
originalLogger: tmpLogger,
}
}
// SessionName returns the name of the logger session
func (l *LagerAdapter) SessionName() string {
return l.originalLogger.SessionName()
}
// Debug logs a message at the debug log level.
func (l *LagerAdapter) Debug(action string, data ...lager.Data) {
l.originalLogger.Debug(action, dataToFields(data)...)
}
// Info logs a message at the info log level.
func (l *LagerAdapter) Info(action string, data ...lager.Data) {
l.originalLogger.Info(action, dataToFields(data)...)
}
// Error logs a message at the error log level.
func (l *LagerAdapter) Error(action string, err error, data ...lager.Data) {
l.originalLogger.Error(action, appendError(err, dataToFields(data))...)
}
// Fatal logs a message and exits with status 1.
func (l *LagerAdapter) Fatal(action string, err error, data ...lager.Data) {
l.originalLogger.Fatal(action, appendError(err, dataToFields(data))...)
}
// WithData returns a logger with newly added data.
func (l *LagerAdapter) WithData(data lager.Data) lager.Logger {
return &LagerAdapter{
originalLogger: l.originalLogger.With(dataToFields([]lager.Data{data})...),
}
}
func dataToFields(data []lager.Data) []zap.Field {
fields := []zap.Field{}
for _, datum := range data {
for key, value := range datum {
fields = append(fields, zap.String(key, fmt.Sprintf("%v", value)))
}
}
return fields
}
func appendError(err error, fields []zap.Field) []zap.Field {
return append(fields, zap.Error(err))
}