File tree 4 files changed +132
-0
lines changed
4 files changed +132
-0
lines changed Original file line number Diff line number Diff line change
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [ Keep a Changelog] ( https://keepachangelog.com/en/1.0.0/ ) ,
5
+ and this project adheres to [ Semantic Versioning] ( https://semver.org/spec/v2.0.0.html ) .
6
+
7
+ ## [ Unreleased]
8
+ ### Added
9
+ - Nothing
10
+
11
+ ### Changed
12
+ - Nothing
13
+
14
+ ### Deprecated
15
+ - Nothing
16
+
17
+ ### Removed
18
+ - Nothing
19
+
20
+ ### Fixed
21
+ - Nothing
22
+
23
+ ### Security
24
+ - Nothing
25
+
26
+ ## [ 1.3.0] - 2019-02-27
27
+ ### Added
28
+ - ` ConfigureDefaultLogger ` boilerplate for logger configuration
29
+ - ` measuredLoggingHandler ` to wrap loggers with metrics
30
+ - ` CHANGELOG.md ` : this file
Original file line number Diff line number Diff line change
1
+ package log
2
+
3
+ import (
4
+ "os"
5
+ )
6
+
7
+ // Config defines the logging configuration
8
+ type Config struct {
9
+ Level string `default:"info"`
10
+ Output string `default:"stdout"`
11
+ }
12
+
13
+ // ConfigureDefaultLogger configures loggers for your service, optionally adding log message counters with your favorite
14
+ // metrics system
15
+ func ConfigureDefaultLogger (name string , cfg Config , logCounters ... CountLogMessage ) {
16
+ if logLevel , ok := logLevelMap [cfg .Level ]; ok {
17
+ SetLevel (logLevel ) // This sets the default level for all future
18
+ DefaultLevel = logLevel
19
+ } else {
20
+ Warningf ("Unknown log level configured: %s" , cfg .Level )
21
+ }
22
+
23
+ var handler Handler = NewFileHandler (getLoggerOutput (cfg .Output ))
24
+
25
+ if len (logCounters ) > 0 {
26
+ handler = & metricsAgentLoggingHandler {
27
+ Handler : handler ,
28
+ logCounters : logCounters ,
29
+ }
30
+ }
31
+ handler .SetFormatter (DefaultFormatter )
32
+
33
+ logger := NewLogger (name )
34
+ if cfg .Level != logLevelDebug {
35
+ logger = NoDebugLogger {
36
+ Logger : logger ,
37
+ }
38
+ }
39
+ logger .SetHandler (handler )
40
+
41
+ DefaultLogger = logger
42
+ Infof ("Configured default logger %s with log level %s" , name , cfg .Level )
43
+ }
44
+
45
+ func getLoggerOutput (outputName string ) * os.File {
46
+ switch outputName {
47
+ case "stdout" :
48
+ return os .Stdout
49
+ case "stderr" :
50
+ return os .Stderr
51
+ default :
52
+ Warningf ("Unknown logger output defined in the config: '%s'" , outputName )
53
+ return os .Stderr
54
+ }
55
+ }
Original file line number Diff line number Diff line change @@ -58,3 +58,29 @@ func Infoln(args ...interface{}) { DefaultLogger.Infoln(args..
58
58
func Debug (args ... interface {}) { DefaultLogger .Debug (args ... ) }
59
59
func Debugf (format string , args ... interface {}) { DefaultLogger .Debugf (format , args ... ) }
60
60
func Debugln (args ... interface {}) { DefaultLogger .Debugln (args ... ) }
61
+
62
+ const (
63
+ logLevelCritical = "critical"
64
+ logLevelError = "error"
65
+ logLevelWarning = "warning"
66
+ logLevelNotice = "notice"
67
+ logLevelInfo = "info"
68
+ logLevelDebug = "debug"
69
+ )
70
+
71
+ var logLevelMap = map [string ]Level {
72
+ logLevelCritical : CRITICAL ,
73
+ logLevelError : ERROR ,
74
+ logLevelWarning : WARNING ,
75
+ logLevelNotice : NOTICE ,
76
+ logLevelInfo : INFO ,
77
+ logLevelDebug : DEBUG ,
78
+ }
79
+
80
+ var logLevelNameMap = make (map [Level ]string )
81
+
82
+ func init () {
83
+ for name , value := range logLevelMap {
84
+ logLevelNameMap [value ] = name
85
+ }
86
+ }
Original file line number Diff line number Diff line change
1
+ package log
2
+
3
+ // CountLogMessage offers a method to count log messages logged by the logger
4
+ type CountLogMessage func (level string )
5
+
6
+ type metricsAgentLoggingHandler struct {
7
+ Handler
8
+ logCounters []CountLogMessage
9
+ }
10
+
11
+ // Handle decorates Handler's Handle method counting the log messages
12
+ func (h * metricsAgentLoggingHandler ) Handle (record * Record ) {
13
+ level := "unknown"
14
+ if levelName , ok := logLevelNameMap [record .Level ]; ok {
15
+ level = levelName
16
+ }
17
+ for _ , countLogMessage := range h .logCounters {
18
+ countLogMessage (level )
19
+ }
20
+ h .Handler .Handle (record )
21
+ }
You can’t perform that action at this time.
0 commit comments