-
Notifications
You must be signed in to change notification settings - Fork 20
/
logger.go
68 lines (57 loc) · 2.13 KB
/
logger.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
package constructors
import (
"context"
"log"
"github.com/go-masonry/mortar/logger"
"github.com/go-masonry/mortar/logger/naive"
"github.com/go-masonry/mortar/interfaces/cfg"
confkeys "github.com/go-masonry/mortar/interfaces/cfg/keys"
logInt "github.com/go-masonry/mortar/interfaces/log"
"github.com/go-masonry/mortar/mortar"
"go.uber.org/fx"
)
// FxGroupLoggerContextExtractors defines group name
const FxGroupLoggerContextExtractors = "loggerContextExtractors"
const (
application = "app"
hostname = "host"
gitCommit = "git"
)
const compensateDefaultLogger = 1
type loggerDeps struct {
fx.In
Config cfg.Config
LoggerBuilder logInt.Builder `optional:"true"`
ContextExtractors []logInt.ContextExtractor `group:"loggerContextExtractors"`
}
// DefaultLogger is a constructor that will create a logger with some default values on top of provided ones
func DefaultLogger(deps loggerDeps) logInt.Logger {
var logLevel = logInt.InfoLevel
if levelValue := deps.Config.Get(confkeys.LogLevel); levelValue.IsSet() {
logLevel = logInt.ParseLevel(levelValue.String())
}
builder := deps.getLogBuilder().SetLevel(logLevel).IncrementSkipFrames(compensateDefaultLogger)
return logger.CreateMortarLogger(builder, append(deps.ContextExtractors, deps.selfStaticFieldsContextExtractor)...)
}
func (d loggerDeps) selfStaticFieldsContextExtractor(_ context.Context) map[string]interface{} {
output := make(map[string]interface{})
info := mortar.GetBuildInformation()
appName := d.Config.Get(confkeys.ApplicationName).String()
if len(appName) > 0 && d.Config.Get(confkeys.LogIncludeName).Bool() {
output[application] = appName
}
if len(info.Hostname) > 0 && d.Config.Get(confkeys.LogIncludeHost).Bool() {
output[hostname] = info.Hostname
}
if len(info.GitCommit) > 0 && d.Config.Get(confkeys.LogIncludeGitSHA).Bool() {
output[gitCommit] = info.GitCommit
}
return output
}
func (d loggerDeps) getLogBuilder() logInt.Builder {
if d.LoggerBuilder != nil {
return d.LoggerBuilder
}
log.Printf("[Mortar] WARNING \tNo logger builder provided, using default logger. Some features will not be supported")
return naive.Builder()
}