-
Notifications
You must be signed in to change notification settings - Fork 50
/
loglib.go
91 lines (75 loc) · 2.33 KB
/
loglib.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
// Package logging Functions to set unique configuration for use with the logrus logger
package logging
/*
Copyright 2019 - 2021 Crunchy Data Solutions, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import (
"fmt"
"os"
"regexp"
"runtime"
msgs "github.com/percona/percona-postgresql-operator/pkg/apiservermsgs"
log "github.com/sirupsen/logrus"
)
func SetParameters() LogValues {
var logval LogValues
logval.version = msgs.PGO_VERSION
return logval
}
// LogValues holds the standard log value types
type LogValues struct {
version string
}
// formatter adds default fields to each log entry.
type formatter struct {
fields log.Fields
lf log.Formatter
}
// Format satisfies the logrus.Formatter interface.
func (f *formatter) Format(e *log.Entry) ([]byte, error) {
for k, v := range f.fields {
e.Data[k] = v
}
return f.lf.Format(e)
}
// CrunchyLogger adds the customized logging fields to the logrus instance context
func CrunchyLogger(logDetails LogValues) {
// Sets calling method as a field
log.SetReportCaller(true)
crunchyTextFormatter := &log.TextFormatter{
CallerPrettyfier: func(f *runtime.Frame) (string, string) {
filename := f.File
function := f.Function
re1 := regexp.MustCompile(`postgres-operator/(.*go)`)
result1 := re1.FindStringSubmatch(f.File)
if len(result1) > 1 {
filename = result1[1]
}
re2 := regexp.MustCompile(`postgres-operator/(.*)`)
result2 := re2.FindStringSubmatch(f.Function)
if len(result2) > 1 {
function = result2[1]
}
return fmt.Sprintf("%s()", function), fmt.Sprintf("%s:%d", filename, f.Line)
},
FullTimestamp: true,
}
log.SetFormatter(&formatter{
fields: log.Fields{
"version": logDetails.version,
},
lf: crunchyTextFormatter,
})
// Output to stdout instead of the default stderr
// Can be any io.Writer, see below for File example
log.SetOutput(os.Stdout)
}