File tree Expand file tree Collapse file tree 4 files changed +132
-0
lines changed
Expand file tree Collapse file tree 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..
5858func Debug (args ... interface {}) { DefaultLogger .Debug (args ... ) }
5959func Debugf (format string , args ... interface {}) { DefaultLogger .Debugf (format , args ... ) }
6060func 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