diff --git a/app/analytics.go b/app/analytics.go index 9c18905a7a..ade0f1e4c8 100644 --- a/app/analytics.go +++ b/app/analytics.go @@ -151,7 +151,7 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo } rows[4].Value = float64(r.Data.(int64)) - // If in HA mode then aggregrate all the stats + // If in HA mode then aggregate all the stats if a.Cluster() != nil && *a.Config().ClusterSettings.Enable { stats, err := a.Cluster().GetClusterStats() if err != nil { diff --git a/app/audit.go b/app/audit.go index f22eb3c0e3..4c3e0624ef 100644 --- a/app/audit.go +++ b/app/audit.go @@ -37,28 +37,28 @@ func (s *Server) configureAudit(adt *audit.Audit) { adt.OnQueueFull = s.onAuditTargetQueueFull adt.OnError = s.onAuditError - // For now we only support sending audit records to Syslog via TLS. + // Configure target for SysLog via TLS. // See https://www.rsyslog.com/doc/v8-stable/tutorials/tls_cert_summary.html - if *s.Config().ExperimentalAuditSettings.Enabled { - IP := *s.Config().ExperimentalAuditSettings.IP + if *s.Config().ExperimentalAuditSettings.SysLogEnabled { + IP := *s.Config().ExperimentalAuditSettings.SysLogIP if IP == "" { IP = "localhost" } - port := *s.Config().ExperimentalAuditSettings.Port + port := *s.Config().ExperimentalAuditSettings.SysLogPort if port <= 0 { port = 6514 } raddr := fmt.Sprintf("%s:%d", IP, port) - maxQSize := *s.Config().ExperimentalAuditSettings.MaxQSize + maxQSize := *s.Config().ExperimentalAuditSettings.SysLogMaxQueueSize if maxQSize <= 0 { maxQSize = audit.DefMaxQueueSize } params := &audit.SyslogParams{ Raddr: raddr, - Cert: *s.Config().ExperimentalAuditSettings.Cert, - Tag: *s.Config().ExperimentalAuditSettings.Tag, - Insecure: *s.Config().ExperimentalAuditSettings.Insecure, + Cert: *s.Config().ExperimentalAuditSettings.SysLogCert, + Tag: *s.Config().ExperimentalAuditSettings.SysLogTag, + Insecure: *s.Config().ExperimentalAuditSettings.SysLogInsecure, } filter := adt.MakeFilter(RestLevel, RestContentLevel, RestPermsLevel, CLILevel) @@ -66,10 +66,38 @@ func (s *Server) configureAudit(adt *audit.Audit) { target, err := audit.NewSyslogTLSTarget(filter, formatter, params, maxQSize) if err != nil { mlog.Error("cannot configure SysLogTLS audit target", mlog.Err(err)) - return + } else { + mlog.Debug("SysLogTLS audit target connected successfully", mlog.String("raddr", raddr)) + adt.AddTarget(target) + } + } + + // Configure target for rotating file output + if *s.Config().ExperimentalAuditSettings.FileEnabled { + opts := audit.FileOptions{ + Filename: *s.Config().ExperimentalAuditSettings.FileName, + MaxSize: *s.Config().ExperimentalAuditSettings.FileMaxSizeMB, + MaxAge: *s.Config().ExperimentalAuditSettings.FileMaxAgeDays, + MaxBackups: *s.Config().ExperimentalAuditSettings.FileMaxBackups, + Compress: *s.Config().ExperimentalAuditSettings.FileCompress, + } + + maxQueueSize := *s.Config().ExperimentalAuditSettings.FileMaxQueueSize + if maxQueueSize <= 0 { + maxQueueSize = audit.DefMaxQueueSize + } + + filter := adt.MakeFilter(RestLevel, RestContentLevel, RestPermsLevel, CLILevel) + formatter := adt.MakeJSONFormatter() + formatter.DisableTimestamp = false + formatter.Indent = "\n" + target, err := audit.NewFileTarget(filter, formatter, opts, maxQueueSize) + if err != nil { + mlog.Error("cannot configure File audit target", mlog.Err(err)) + } else { + mlog.Debug("File audit target created successfully", mlog.String("filename", opts.Filename)) + adt.AddTarget(target) } - mlog.Debug("SysLogTLS audit target connected successfully", mlog.String("raddy", raddr)) - adt.AddTarget(target) } } diff --git a/audit/audit.go b/audit/audit.go index 3d970c87e2..627d471dc1 100644 --- a/audit/audit.go +++ b/audit/audit.go @@ -5,6 +5,7 @@ package audit import ( "fmt" + "sort" "github.com/wiggin77/logr" "github.com/wiggin77/logr/format" @@ -46,8 +47,10 @@ func (a *Audit) MakeFilter(level ...Level) *logr.CustomFilter { func (a *Audit) MakeJSONFormatter() *format.JSON { f := &format.JSON{ DisableTimestamp: true, + DisableMsg: true, DisableStacktrace: true, DisableLevel: true, + ContextSorter: sortAuditFields, } return f } @@ -117,3 +120,56 @@ func (a *Audit) onLoggerError(err error) { a.OnError(err) } } + +// sortAuditFields sorts the context fields of an audit record such that some fields +// are prepended in order, some are appended in order, and the rest are sorted alphabetically. +// This is done to make reading the records easier since common fields will appear in the same order. +func sortAuditFields(fields logr.Fields) []format.ContextField { + prependKeys := []string{KeyEvent, KeyStatus, KeyUserID, KeySessionID, KeyIPAddress} + appendKeys := []string{KeyClusterID, KeyClient} + + // sort alphabetically any fields not in the prepend/append lists. + keys := make([]string, 0, len(fields)) + for k := range fields { + if !findIn(k, prependKeys, appendKeys) { + keys = append(keys, k) + } + } + sort.Strings(keys) + + allKeys := make([]string, 0, len(fields)) + + // add any prepends that exist in fields + for _, k := range prependKeys { + if _, ok := fields[k]; ok { + allKeys = append(allKeys, k) + } + } + + // sorted + allKeys = append(allKeys, keys...) + + // add any appends that exist in fields + for _, k := range appendKeys { + if _, ok := fields[k]; ok { + allKeys = append(allKeys, k) + } + } + + cfs := make([]format.ContextField, 0, len(allKeys)) + for _, k := range allKeys { + cfs = append(cfs, format.ContextField{Key: k, Val: fields[k]}) + } + return cfs +} + +func findIn(s string, arrs ...[]string) bool { + for _, list := range arrs { + for _, key := range list { + if s == key { + return true + } + } + } + return false +} diff --git a/audit/audit_test.go b/audit/audit_test.go new file mode 100644 index 0000000000..f8d59eac29 --- /dev/null +++ b/audit/audit_test.go @@ -0,0 +1,67 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +package audit + +import ( + "testing" + + "github.com/stretchr/testify/require" + "github.com/wiggin77/logr" + "github.com/wiggin77/logr/format" +) + +func Test_sortAuditFields(t *testing.T) { + type args struct { + fields logr.Fields + } + tests := []struct { + name string + args args + want []format.ContextField + }{ + {name: "empty list", + args: args{fields: logr.Fields{}}, + want: []format.ContextField{}, + }, + {name: "partial list", + args: args{fields: logr.Fields{"zProp": "x", "xProp": "x", "yProp": "x", KeyClusterID: "x", KeyEvent: "x"}}, + want: []format.ContextField{ + {Key: KeyEvent, Val: "x"}, + {Key: "xProp", Val: "x"}, + {Key: "yProp", Val: "x"}, + {Key: "zProp", Val: "x"}, + {Key: KeyClusterID, Val: "x"}, + }, + }, + {name: "append/prepend only list", + args: args{fields: logr.Fields{KeyClusterID: "x", KeyEvent: "x", KeySessionID: "x", KeyIPAddress: "x", KeyClient: "x", + KeyUserID: "x", KeyStatus: "x"}}, + want: []format.ContextField{ + // prepend: KeyEvent, KeyStatus, KeyUserID, KeySessionID, KeyIPAddress + // append: KeyClusterID, KeyClient + {Key: KeyEvent, Val: "x"}, + {Key: KeyStatus, Val: "x"}, + {Key: KeyUserID, Val: "x"}, + {Key: KeySessionID, Val: "x"}, + {Key: KeyIPAddress, Val: "x"}, + {Key: KeyClusterID, Val: "x"}, + {Key: KeyClient, Val: "x"}, + }, + }, + {name: "sortables only list", + args: args{fields: logr.Fields{"zProp": "x", "xProp": "x", "yProp": "x"}}, + want: []format.ContextField{ + {Key: "xProp", Val: "x"}, + {Key: "yProp", Val: "x"}, + {Key: "zProp", Val: "x"}, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := sortAuditFields(tt.args.fields) + require.Equal(t, tt.want, got) + }) + } +} diff --git a/audit/const.go b/audit/const.go index a092ef7783..d2d7d3dd61 100644 --- a/audit/const.go +++ b/audit/const.go @@ -13,6 +13,7 @@ const ( KeySessionID = "session_id" KeyClient = "client" KeyIPAddress = "ip_address" + KeyClusterID = "cluster_id" Success = "success" Attempt = "attempt" diff --git a/audit/file.go b/audit/file.go new file mode 100644 index 0000000000..9425d6595c --- /dev/null +++ b/audit/file.go @@ -0,0 +1,34 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +package audit + +import ( + "os" + + "github.com/wiggin77/logr" + "github.com/wiggin77/logr/target" +) + +type FileOptions target.FileOptions + +// NewFileTarget creates a target capable of outputting log records to a rotated file. +func NewFileTarget(filter logr.Filter, formatter logr.Formatter, opts FileOptions, maxQSize int) (*target.File, error) { + fopts := target.FileOptions(opts) + err := checkFileWritable(fopts.Filename) + if err != nil { + return nil, err + } + target := target.NewFileTarget(filter, formatter, fopts, maxQSize) + return target, nil +} + +func checkFileWritable(filename string) error { + // try opening/creating the file for writing + file, err := os.OpenFile(filename, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0600) + if err != nil { + return err + } + file.Close() + return nil +} diff --git a/go.mod b/go.mod index 93bfafe31a..9699497be5 100644 --- a/go.mod +++ b/go.mod @@ -90,7 +90,7 @@ require ( github.com/tylerb/graceful v1.2.15 github.com/uber/jaeger-client-go v2.22.1+incompatible github.com/uber/jaeger-lib v2.2.0+incompatible - github.com/wiggin77/logr v1.0.3 + github.com/wiggin77/logr v1.0.4 github.com/wiggin77/merror v1.0.2 github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect github.com/ziutek/mymysql v1.5.4 // indirect diff --git a/go.sum b/go.sum index 5d2fb80907..3e0bfc796b 100644 --- a/go.sum +++ b/go.sum @@ -335,8 +335,6 @@ github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/ngdinhtoan/glide-cleanup v0.2.0/go.mod h1:UQzsmiDOb8YV3nOsCxK/c9zPpCZVNoHScRE3EO9pVMM= -github.com/nsf/jsondiff v0.0.0-20190712045011-8443391ee9b6 h1:qsqscDgSJy+HqgMTR+3NwjYJBbp1+honwDsszLoS+pA= -github.com/nsf/jsondiff v0.0.0-20190712045011-8443391ee9b6/go.mod h1:uFMI8w+ref4v2r9jz+c9i1IfIttS/OkmLfrk1jne5hs= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= @@ -507,8 +505,8 @@ github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49u github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= github.com/wiggin77/cfg v1.0.2 h1:NBUX+iJRr+RTncTqTNvajHwzduqbhCQjEqxLHr6Fk7A= github.com/wiggin77/cfg v1.0.2/go.mod h1:b3gotba2e5bXTqTW48DwIFoLc+4lWKP7WPi/CdvZ4aE= -github.com/wiggin77/logr v1.0.3 h1:4Cj899GZJInB9vudlxsmLRDsBlsw9pE/nyJo9XZ/yzo= -github.com/wiggin77/logr v1.0.3/go.mod h1:oIvnsSkyTQojUsr7QO0d4rE2afZbsTj/5WbiikGJu3E= +github.com/wiggin77/logr v1.0.4 h1:g8YO5AU9hhKvLQnXceP8/y3JJtw3wPKL4kTzMTUdN5k= +github.com/wiggin77/logr v1.0.4/go.mod h1:h98FF6GPfThhDrHCg063hZA1sIyOEzQ/P85wgqI0IqE= github.com/wiggin77/merror v1.0.2 h1:V0nH9eFp64ASyaXC+pB5WpvBoCg7NUwvaCSKdzlcHqw= github.com/wiggin77/merror v1.0.2/go.mod h1:uQTcIU0Z6jRK4OwqganPYerzQxSFJ4GSHM3aurxxQpg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= diff --git a/model/config.go b/model/config.go index 07951dd5d6..82db6eb528 100644 --- a/model/config.go +++ b/model/config.go @@ -1061,42 +1061,78 @@ func (s *LogSettings) SetDefaults() { } type ExperimentalAuditSettings struct { - Enabled *bool `restricted:"true"` - IP *string `restricted:"true"` - Port *int `restricted:"true"` - Tag *string `restricted:"true"` - Cert *string `restricted:"true"` - Insecure *bool `restricted:"true"` - MaxQSize *int `restricted:"true"` + SysLogEnabled *bool `restricted:"true"` + SysLogIP *string `restricted:"true"` + SysLogPort *int `restricted:"true"` + SysLogTag *string `restricted:"true"` + SysLogCert *string `restricted:"true"` + SysLogInsecure *bool `restricted:"true"` + SysLogMaxQueueSize *int `restricted:"true"` + + FileEnabled *bool `restricted:"true"` + FileName *string `restricted:"true"` + FileMaxSizeMB *int `restricted:"true"` + FileMaxAgeDays *int `restricted:"true"` + FileMaxBackups *int `restricted:"true"` + FileCompress *bool `restricted:"true"` + FileMaxQueueSize *int `restricted:"true"` } func (s *ExperimentalAuditSettings) SetDefaults() { - if s.Enabled == nil { - s.Enabled = NewBool(false) + if s.SysLogEnabled == nil { + s.SysLogEnabled = NewBool(false) } - if s.IP == nil { - s.IP = NewString("localhost") + if s.SysLogIP == nil { + s.SysLogIP = NewString("localhost") } - if s.Port == nil { - s.Port = NewInt(6514) + if s.SysLogPort == nil { + s.SysLogPort = NewInt(6514) } - if s.Tag == nil { - s.Tag = NewString("") + if s.SysLogTag == nil { + s.SysLogTag = NewString("") } - if s.Cert == nil { - s.Cert = NewString("") + if s.SysLogCert == nil { + s.SysLogCert = NewString("") } - if s.Insecure == nil { - s.Insecure = NewBool(false) + if s.SysLogInsecure == nil { + s.SysLogInsecure = NewBool(false) } - if s.MaxQSize == nil { - s.MaxQSize = NewInt(1000) + if s.SysLogMaxQueueSize == nil { + s.SysLogMaxQueueSize = NewInt(1000) + } + + if s.FileEnabled == nil { + s.FileEnabled = NewBool(false) + } + + if s.FileName == nil { + s.FileName = NewString("") + } + + if s.FileMaxSizeMB == nil { + s.FileMaxSizeMB = NewInt(100) + } + + if s.FileMaxAgeDays == nil { + s.FileMaxAgeDays = NewInt(0) // no limit on age + } + + if s.FileMaxBackups == nil { // no limit on number of backups + s.FileMaxBackups = NewInt(0) + } + + if s.FileCompress == nil { + s.FileCompress = NewBool(false) + } + + if s.FileMaxQueueSize == nil { + s.FileMaxQueueSize = NewInt(1000) } } diff --git a/vendor/github.com/shinji62/logrus-syslog-ng/README.md b/vendor/github.com/shinji62/logrus-syslog-ng/README.md deleted file mode 100644 index 57314e7400..0000000000 --- a/vendor/github.com/shinji62/logrus-syslog-ng/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# Syslog Hooks for Logrus supporting TLS :walrus: - -## Description - -Simple drop-in replacement for the default hook for syslog. - -Adding support for TLS and using https://github.com/RackSec/srslog instead of go default `log/syslog` lib. - - -## Usage for tls - -Only tcp+tls protocol is supported in this case - -```go -import ( - syslog "github.com/RackSec/srslog" - "github.com/Sirupsen/logrus" - logrus_syslog "github.com/shinji62/logrus-syslog-ng" -) - -func main() { - log := logrus.New() - hook, err := logrus_syslog.NewSyslogHookTLS("localhost:514", syslog.LOG_INFO, "tag","./mycert.pem") - - if err == nil { - log.Hooks.Add(hook) - } -} -``` - - -## Usage without TLS - -Tcp, udp are supported - -```go -import ( - syslog "github.com/RackSec/srslog" - "github.com/Sirupsen/logrus" - logrus_syslog "github.com/shinji62/logrus-syslog-ng" -) - -func main() { - log := logrus.New() - hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "") - - if err == nil { - log.Hooks.Add(hook) - } -} -``` - -If you want to connect to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). Just assign empty string to the first two parameters of `NewSyslogHook`. It should look like the following. - -```go -import ( - syslog "github.com/RackSec/srslog" - "github.com/Sirupsen/logrus" - logrus_syslog "github.com/shinji62/logrus-syslog-ng" -) - -func main() { - log := logrus.New() - hook, err := logrus_syslog.NewSyslogHook("", "", syslog.LOG_INFO, "") - - if err == nil { - log.Hooks.Add(hook) - } -} -``` diff --git a/vendor/github.com/shinji62/logrus-syslog-ng/glide.lock b/vendor/github.com/shinji62/logrus-syslog-ng/glide.lock deleted file mode 100644 index 88b419a68a..0000000000 --- a/vendor/github.com/shinji62/logrus-syslog-ng/glide.lock +++ /dev/null @@ -1,49 +0,0 @@ -hash: ab89e9ad4cf3394d549643bff7095cf5a161a19390b75e66515732863bf4c77d -updated: 2017-09-21T14:10:21.771379602+09:00 -imports: -- name: github.com/onsi/ginkgo - version: 00054c0bb96fc880d4e0be1b90937fad438c5290 - subpackages: - - config - - internal/codelocation - - internal/containernode - - internal/failer - - internal/leafnodes - - internal/remote - - internal/spec - - internal/specrunner - - internal/suite - - internal/testingtproxy - - internal/writer - - reporters - - reporters/stenographer - - reporters/stenographer/support/go-colorable - - reporters/stenographer/support/go-isatty - - types -- name: github.com/onsi/gomega - version: 4dfabf7db2e4147ec99a86db32b2f2a3484cfee8 - subpackages: - - format - - internal/assertion - - internal/asyncassertion - - internal/testingtsupport - - matchers - - matchers/support/goraph/bipartitegraph - - matchers/support/goraph/edge - - matchers/support/goraph/node - - matchers/support/goraph/util - - types -- name: github.com/RackSec/srslog - version: a974ba6f7fb527d2ddc73ee9c05d3e2ccc0af0dc -- name: github.com/sirupsen/logrus - version: 89742aefa4b206dcf400792f3bd35b542998eb3b -- name: golang.org/x/crypto - version: 7d9177d70076375b9a59c8fde23d52d9c4a7ecd5 - subpackages: - - ssh/terminal -- name: golang.org/x/sys - version: d75a52659825e75fff6158388dddc6a5b04f9ba5 - subpackages: - - unix - - windows -testImports: [] diff --git a/vendor/github.com/shinji62/logrus-syslog-ng/glide.yaml b/vendor/github.com/shinji62/logrus-syslog-ng/glide.yaml deleted file mode 100644 index fd5a25bf3b..0000000000 --- a/vendor/github.com/shinji62/logrus-syslog-ng/glide.yaml +++ /dev/null @@ -1,45 +0,0 @@ -package: github.com/shinji62/logrus-syslog-ng -import: -- package: github.com/RackSec/srslog - version: a974ba6f7fb527d2ddc73ee9c05d3e2ccc0af0dc -- package: github.com/sirupsen/logrus - version: 89742aefa4b206dcf400792f3bd35b542998eb3b -- package: github.com/onsi/ginkgo - version: 00054c0bb96fc880d4e0be1b90937fad438c5290 - subpackages: - - config - - internal/codelocation - - internal/containernode - - internal/failer - - internal/leafnodes - - internal/remote - - internal/spec - - internal/specrunner - - internal/suite - - internal/testingtproxy - - internal/writer - - reporters - - reporters/stenographer - - reporters/stenographer/support/go-colorable - - reporters/stenographer/support/go-isatty - - types -- package: github.com/onsi/gomega - version: 4dfabf7db2e4147ec99a86db32b2f2a3484cfee8 - subpackages: - - format - - internal/assertion - - internal/asyncassertion - - internal/testingtsupport - - matchers - - matchers/support/goraph/bipartitegraph - - matchers/support/goraph/edge - - matchers/support/goraph/node - - matchers/support/goraph/util - - types -- package: golang.org/x/sys - version: d75a52659825e75fff6158388dddc6a5b04f9ba5 - subpackages: - - unix -- package: golang.org/x/crypto - subpackages: - - ssh/terminal diff --git a/vendor/github.com/shinji62/logrus-syslog-ng/syslog.go b/vendor/github.com/shinji62/logrus-syslog-ng/syslog.go deleted file mode 100644 index 2701970483..0000000000 --- a/vendor/github.com/shinji62/logrus-syslog-ng/syslog.go +++ /dev/null @@ -1,75 +0,0 @@ -// +build !windows,!nacl,!plan9 - -package logrus_syslog - -import ( - "crypto/tls" - "crypto/x509" - "fmt" - "io/ioutil" - "os" - - syslog "github.com/RackSec/srslog" - "github.com/sirupsen/logrus" -) - -const ( - SecureProto = "tcp+tls" -) - -// SyslogHook to send logs via syslog. -type SyslogHook struct { - Writer *syslog.Writer -} - -// Creates a hook to be added to an instance of logger. This is called with -// `hook, err := NewSyslogHook("udp", "localhost:514", syslog.LOG_DEBUG, "")` -// `if err == nil { log.Hooks.Add(hook) }` -func NewSyslogHook(network, raddr string, priority syslog.Priority, tag string) (*SyslogHook, error) { - w, err := syslog.Dial(network, raddr, priority, tag) - return &SyslogHook{w}, err -} - -func NewSyslogHookTls(raddr string, priority syslog.Priority, tag string, certPath string, insecure bool) (*SyslogHook, error) { - serverCert, err := ioutil.ReadFile(certPath) - if err != nil { - return nil, err - } - pool := x509.NewCertPool() - pool.AppendCertsFromPEM(serverCert) - config := tls.Config{ - RootCAs: pool, - } - config.InsecureSkipVerify = insecure - w, err := syslog.DialWithTLSConfig(SecureProto, raddr, priority, tag, &config) - return &SyslogHook{w}, err -} - -func (hook *SyslogHook) Fire(entry *logrus.Entry) error { - line, err := entry.String() - if err != nil { - fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err) - return err - } - - switch entry.Level { - case logrus.PanicLevel: - return hook.Writer.Crit(line) - case logrus.FatalLevel: - return hook.Writer.Crit(line) - case logrus.ErrorLevel: - return hook.Writer.Err(line) - case logrus.WarnLevel: - return hook.Writer.Warning(line) - case logrus.InfoLevel: - return hook.Writer.Info(line) - case logrus.DebugLevel: - return hook.Writer.Debug(line) - default: - return nil - } -} - -func (hook *SyslogHook) Levels() []logrus.Level { - return logrus.AllLevels -} diff --git a/vendor/github.com/wiggin77/logr/const.go b/vendor/github.com/wiggin77/logr/const.go index a147030759..704d050756 100644 --- a/vendor/github.com/wiggin77/logr/const.go +++ b/vendor/github.com/wiggin77/logr/const.go @@ -11,6 +11,10 @@ const ( // when generating stack traces for logging. DefaultMaxStackFrames = 30 + // MaxLevelID is the maximum value of a level ID. Some level cache implementations will + // allocate a cache of this size. Cannot exceed uint. + MaxLevelID = 256 + // DefaultEnqueueTimeout is the default amount of time a log record can take to be queued. // This only applies to blocking enqueue which happen after `logr.OnQueueFull` is called // and returns false. diff --git a/vendor/github.com/wiggin77/logr/filter.go b/vendor/github.com/wiggin77/logr/filter.go index 0e0285100d..6e654cd7b2 100644 --- a/vendor/github.com/wiggin77/logr/filter.go +++ b/vendor/github.com/wiggin77/logr/filter.go @@ -1,7 +1,7 @@ package logr // LevelID is the unique id of each level. -type LevelID uint8 +type LevelID uint // Level provides a mechanism to enable/disable specific log lines. type Level struct { diff --git a/vendor/github.com/wiggin77/logr/format/json.go b/vendor/github.com/wiggin77/logr/format/json.go index 8ebc918600..cceed20edb 100644 --- a/vendor/github.com/wiggin77/logr/format/json.go +++ b/vendor/github.com/wiggin77/logr/format/json.go @@ -4,6 +4,7 @@ import ( "bytes" "fmt" "runtime" + "sort" "sync" "time" @@ -11,6 +12,12 @@ import ( "github.com/wiggin77/logr" ) +// ContextField is a name/value pair within the context fields. +type ContextField struct { + Key string + Val interface{} +} + // JSON formats log records as JSON. type JSON struct { // DisableTimestamp disables output of timestamp field. @@ -28,8 +35,7 @@ type JSON struct { // then DefTimestampFormat is used. TimestampFormat string - // Indent sets the character used to indent or pretty print the JSON. - // Empty string means no pretty print. + // Deprecated: this has no effect. Indent string // EscapeHTML determines if certain characters (e.g. `<`, `>`, `&`) @@ -52,6 +58,9 @@ type JSON struct { // KeyStacktrace overrides the stacktrace field key name. KeyStacktrace string + // ContextSorter allows custom sorting for the context fields. + ContextSorter func(fields logr.Fields) []ContextField + once sync.Once } @@ -67,16 +76,23 @@ func (j *JSON) Format(rec *logr.LogRec, stacktrace bool, buf *bytes.Buffer) (*by enc.Release() }() + sorter := j.ContextSorter + if sorter == nil { + sorter = j.defaultContextSorter + } + jlr := JSONLogRec{ LogRec: rec, JSON: j, stacktrace: stacktrace, + sorter: sorter, } err := enc.EncodeObject(jlr) if err != nil { return nil, err } + buf.WriteByte('\n') return buf, nil } @@ -95,11 +111,27 @@ func (j *JSON) applyDefaultKeyNames() { } } +// defaultContextSorter sorts the context fields alphabetically by key. +func (j *JSON) defaultContextSorter(fields logr.Fields) []ContextField { + keys := make([]string, 0, len(fields)) + for k := range fields { + keys = append(keys, k) + } + sort.Strings(keys) + + cf := make([]ContextField, 0, len(keys)) + for _, k := range keys { + cf = append(cf, ContextField{Key: k, Val: fields[k]}) + } + return cf +} + // JSONLogRec decorates a LogRec adding JSON encoding. type JSONLogRec struct { *logr.LogRec *JSON stacktrace bool + sorter func(fields logr.Fields) []ContextField } // MarshalJSONObject encodes the LogRec as JSON. @@ -119,14 +151,14 @@ func (rec JSONLogRec) MarshalJSONObject(enc *gojay.Encoder) { enc.AddStringKey(rec.KeyMsg, rec.Msg()) } if !rec.DisableContext { + ctxFields := rec.sorter(rec.Fields()) if rec.KeyContextFields != "" { - enc.AddObjectKey(rec.KeyContextFields, jsonFields(rec.Fields())) + enc.AddObjectKey(rec.KeyContextFields, jsonFields(ctxFields)) } else { - m := rec.Fields() - if len(m) > 0 { - for k, v := range m { - key := rec.prefixCollision(k) - encodeField(enc, key, v) + if len(ctxFields) > 0 { + for _, cf := range ctxFields { + key := rec.prefixCollision(cf.Key) + encodeField(enc, key, cf.Val) } } } @@ -180,12 +212,12 @@ func (f stackFrame) IsNil() bool { return false } -type jsonFields logr.Fields +type jsonFields []ContextField // MarshalJSONObject encodes Fields map to JSON. func (f jsonFields) MarshalJSONObject(enc *gojay.Encoder) { - for k, v := range f { - encodeField(enc, k, v) + for _, ctxField := range f { + encodeField(enc, ctxField.Key, ctxField.Val) } } diff --git a/vendor/github.com/wiggin77/logr/go.mod b/vendor/github.com/wiggin77/logr/go.mod index 97cc6bfee2..6924506c2e 100644 --- a/vendor/github.com/wiggin77/logr/go.mod +++ b/vendor/github.com/wiggin77/logr/go.mod @@ -4,7 +4,6 @@ go 1.12 require ( github.com/francoispqt/gojay v1.2.13 - github.com/nsf/jsondiff v0.0.0-20190712045011-8443391ee9b6 github.com/wiggin77/cfg v1.0.2 github.com/wiggin77/merror v1.0.2 gopkg.in/natefinch/lumberjack.v2 v2.0.0 diff --git a/vendor/github.com/wiggin77/logr/go.sum b/vendor/github.com/wiggin77/logr/go.sum index 168e3e8619..ea688513e9 100644 --- a/vendor/github.com/wiggin77/logr/go.sum +++ b/vendor/github.com/wiggin77/logr/go.sum @@ -15,6 +15,7 @@ github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBT github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -58,10 +59,9 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/nsf/jsondiff v0.0.0-20190712045011-8443391ee9b6 h1:qsqscDgSJy+HqgMTR+3NwjYJBbp1+honwDsszLoS+pA= -github.com/nsf/jsondiff v0.0.0-20190712045011-8443391ee9b6/go.mod h1:uFMI8w+ref4v2r9jz+c9i1IfIttS/OkmLfrk1jne5hs= github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -93,6 +93,7 @@ github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYED github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= +github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= @@ -157,6 +158,7 @@ google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmE google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= diff --git a/vendor/github.com/wiggin77/logr/levelcache.go b/vendor/github.com/wiggin77/logr/levelcache.go index 3d0c1c7916..2cefb61dd8 100644 --- a/vendor/github.com/wiggin77/logr/levelcache.go +++ b/vendor/github.com/wiggin77/logr/levelcache.go @@ -1,6 +1,7 @@ package logr import ( + "fmt" "sync" ) @@ -15,7 +16,7 @@ type LevelStatus struct { type levelCache interface { setup() get(id LevelID) (LevelStatus, bool) - put(id LevelID, status LevelStatus) + put(id LevelID, status LevelStatus) error clear() } @@ -30,25 +31,32 @@ func (c *syncMapLevelCache) setup() { } func (c *syncMapLevelCache) get(id LevelID) (LevelStatus, bool) { + if id > MaxLevelID { + return LevelStatus{}, false + } s, _ := c.m.Load(id) status := s.(LevelStatus) return status, !status.empty } -func (c *syncMapLevelCache) put(id LevelID, status LevelStatus) { +func (c *syncMapLevelCache) put(id LevelID, status LevelStatus) error { + if id > MaxLevelID { + return fmt.Errorf("level id cannot exceed MaxLevelID (%d)", MaxLevelID) + } c.m.Store(id, status) + return nil } func (c *syncMapLevelCache) clear() { var i LevelID - for i = 0; i < 255; i++ { + for i = 0; i < MaxLevelID; i++ { c.m.Store(i, LevelStatus{empty: true}) } } // arrayLevelCache using array and a mutex. type arrayLevelCache struct { - arr [256]LevelStatus + arr [MaxLevelID + 1]LevelStatus mux sync.RWMutex } @@ -59,6 +67,9 @@ func (c *arrayLevelCache) setup() { //var dummy = LevelStatus{} func (c *arrayLevelCache) get(id LevelID) (LevelStatus, bool) { + if id > MaxLevelID { + return LevelStatus{}, false + } c.mux.RLock() status := c.arr[id] ok := !status.empty @@ -66,11 +77,15 @@ func (c *arrayLevelCache) get(id LevelID) (LevelStatus, bool) { return status, ok } -func (c *arrayLevelCache) put(id LevelID, status LevelStatus) { +func (c *arrayLevelCache) put(id LevelID, status LevelStatus) error { + if id > MaxLevelID { + return fmt.Errorf("level id cannot exceed MaxLevelID (%d)", MaxLevelID) + } c.mux.Lock() defer c.mux.Unlock() c.arr[id] = status + return nil } func (c *arrayLevelCache) clear() { diff --git a/vendor/github.com/wiggin77/logr/logr.go b/vendor/github.com/wiggin77/logr/logr.go index 61fb6a1b38..7b33f47ced 100644 --- a/vendor/github.com/wiggin77/logr/logr.go +++ b/vendor/github.com/wiggin77/logr/logr.go @@ -194,7 +194,10 @@ func (logr *Logr) IsLevelEnabled(lvl Level) LevelStatus { } // Cache and return the result. - logr.lvlCache.put(lvl.ID, status) + if err := logr.lvlCache.put(lvl.ID, status); err != nil { + logr.OnLoggerError(err) + return LevelStatus{} + } return status } diff --git a/vendor/github.com/wiggin77/logr/target/file.go b/vendor/github.com/wiggin77/logr/target/file.go new file mode 100644 index 0000000000..014e48313a --- /dev/null +++ b/vendor/github.com/wiggin77/logr/target/file.go @@ -0,0 +1,92 @@ +package target + +import ( + "context" + "io" + + "github.com/wiggin77/logr" + "github.com/wiggin77/merror" + "gopkg.in/natefinch/lumberjack.v2" +) + +type FileOptions struct { + // Filename is the file to write logs to. Backup log files will be retained + // in the same directory. It uses -lumberjack.log in + // os.TempDir() if empty. + Filename string + + // MaxSize is the maximum size in megabytes of the log file before it gets + // rotated. It defaults to 100 megabytes. + MaxSize int + + // MaxAge is the maximum number of days to retain old log files based on the + // timestamp encoded in their filename. Note that a day is defined as 24 + // hours and may not exactly correspond to calendar days due to daylight + // savings, leap seconds, etc. The default is not to remove old log files + // based on age. + MaxAge int + + // MaxBackups is the maximum number of old log files to retain. The default + // is to retain all old log files (though MaxAge may still cause them to get + // deleted.) + MaxBackups int + + // Compress determines if the rotated log files should be compressed + // using gzip. The default is not to perform compression. + Compress bool +} + +// File outputs log records to a file which can be log rotated based on size or age. +// Uses `https://github.com/natefinch/lumberjack` for rotation. +type File struct { + logr.Basic + out io.WriteCloser +} + +// NewFileTarget creates a target capable of outputting log records to a rotated file. +func NewFileTarget(filter logr.Filter, formatter logr.Formatter, opts FileOptions, maxQueue int) *File { + lumber := &lumberjack.Logger{ + Filename: opts.Filename, + MaxSize: opts.MaxSize, + MaxBackups: opts.MaxBackups, + MaxAge: opts.MaxAge, + Compress: opts.Compress, + } + f := &File{out: lumber} + f.Basic.Start(f, f, filter, formatter, maxQueue) + return f +} + +// Write converts the log record to bytes, via the Formatter, +// and outputs to a file. +func (f *File) Write(rec *logr.LogRec) error { + _, stacktrace := f.IsLevelEnabled(rec.Level()) + + buf := rec.Logger().Logr().BorrowBuffer() + defer rec.Logger().Logr().ReleaseBuffer(buf) + + buf, err := f.Formatter().Format(rec, stacktrace, buf) + if err != nil { + return err + } + _, err = f.out.Write(buf.Bytes()) + return err +} + +// Shutdown flushes any remaining log records and closes the file. +func (f *File) Shutdown(ctx context.Context) error { + errs := merror.New() + + err := f.Basic.Shutdown(ctx) + errs.Append(err) + + err = f.out.Close() + errs.Append(err) + + return errs.ErrorOrNil() +} + +// String returns a string representation of this target. +func (f *File) String() string { + return "FileTarget" +} diff --git a/vendor/github.com/wiggin77/logr/target/syslog.go b/vendor/github.com/wiggin77/logr/target/syslog.go new file mode 100644 index 0000000000..60b09643fb --- /dev/null +++ b/vendor/github.com/wiggin77/logr/target/syslog.go @@ -0,0 +1,94 @@ +// +build !windows,!nacl,!plan9 + +package target + +import ( + "context" + "fmt" + "log/syslog" + + "github.com/wiggin77/logr" + "github.com/wiggin77/merror" +) + +// Syslog outputs log records to local or remote syslog. +type Syslog struct { + logr.Basic + w *syslog.Writer +} + +// SyslogParams provides parameters for dialing a syslog daemon. +type SyslogParams struct { + Network string + Raddr string + Priority syslog.Priority + Tag string +} + +// NewSyslogTarget creates a target capable of outputting log records to remote or local syslog. +func NewSyslogTarget(filter logr.Filter, formatter logr.Formatter, params *SyslogParams, maxQueue int) (*Syslog, error) { + writer, err := syslog.Dial(params.Network, params.Raddr, params.Priority, params.Tag) + if err != nil { + return nil, err + } + + s := &Syslog{w: writer} + s.Basic.Start(s, s, filter, formatter, maxQueue) + + return s, nil +} + +// Shutdown stops processing log records after making best +// effort to flush queue. +func (s *Syslog) Shutdown(ctx context.Context) error { + errs := merror.New() + + err := s.Basic.Shutdown(ctx) + errs.Append(err) + + err = s.w.Close() + errs.Append(err) + + return errs.ErrorOrNil() +} + +// Write converts the log record to bytes, via the Formatter, +// and outputs to syslog. +func (s *Syslog) Write(rec *logr.LogRec) error { + _, stacktrace := s.IsLevelEnabled(rec.Level()) + + buf := rec.Logger().Logr().BorrowBuffer() + defer rec.Logger().Logr().ReleaseBuffer(buf) + + buf, err := s.Formatter().Format(rec, stacktrace, buf) + if err != nil { + return err + } + txt := buf.String() + + switch rec.Level() { + case logr.Panic, logr.Fatal: + err = s.w.Crit(txt) + case logr.Error: + err = s.w.Err(txt) + case logr.Warn: + err = s.w.Warning(txt) + case logr.Debug, logr.Trace: + err = s.w.Debug(txt) + default: + // logr.Info plus all custom levels. + err = s.w.Info(txt) + } + + if err != nil { + reporter := rec.Logger().Logr().ReportError + reporter(fmt.Errorf("syslog write fail: %w", err)) + // syslog writer will try to reconnect. + } + return err +} + +// String returns a string representation of this target. +func (s *Syslog) String() string { + return "SyslogTarget" +} diff --git a/vendor/github.com/wiggin77/logr/target/writer.go b/vendor/github.com/wiggin77/logr/target/writer.go new file mode 100644 index 0000000000..94bece2bab --- /dev/null +++ b/vendor/github.com/wiggin77/logr/target/writer.go @@ -0,0 +1,45 @@ +package target + +import ( + "io" + "io/ioutil" + + "github.com/wiggin77/logr" +) + +// Writer outputs log records to any `io.Writer`. +type Writer struct { + logr.Basic + out io.Writer +} + +// NewWriterTarget creates a target capable of outputting log records to an io.Writer. +func NewWriterTarget(filter logr.Filter, formatter logr.Formatter, out io.Writer, maxQueue int) *Writer { + if out == nil { + out = ioutil.Discard + } + w := &Writer{out: out} + w.Basic.Start(w, w, filter, formatter, maxQueue) + return w +} + +// Write converts the log record to bytes, via the Formatter, +// and outputs to the io.Writer. +func (w *Writer) Write(rec *logr.LogRec) error { + _, stacktrace := w.IsLevelEnabled(rec.Level()) + + buf := rec.Logger().Logr().BorrowBuffer() + defer rec.Logger().Logr().ReleaseBuffer(buf) + + buf, err := w.Formatter().Format(rec, stacktrace, buf) + if err != nil { + return err + } + _, err = w.out.Write(buf.Bytes()) + return err +} + +// String returns a string representation of this target. +func (w *Writer) String() string { + return "WriterTarget" +} diff --git a/vendor/github.com/wiggin77/logrus4logr/.gitignore b/vendor/github.com/wiggin77/logrus4logr/.gitignore deleted file mode 100644 index 632ecb1694..0000000000 --- a/vendor/github.com/wiggin77/logrus4logr/.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -# Binaries for programs and plugins -*.exe -*.exe~ -*.dll -*.so -*.dylib - -# Test binary, build with `go test -c` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out - -# Log files -*.log - -# test apps -test/cmd/textformatter/textformatter -test/cmd/nestedformatter/nestedformatter -test/cmd/fluentdformatter/fluentdformatter -test/cmd/lfshook/lfshook -test/cmd/lfshook-simple/lfshook-simple \ No newline at end of file diff --git a/vendor/github.com/wiggin77/logrus4logr/LICENSE b/vendor/github.com/wiggin77/logrus4logr/LICENSE deleted file mode 100644 index 3bea67884b..0000000000 --- a/vendor/github.com/wiggin77/logrus4logr/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 wiggin77 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/github.com/wiggin77/logrus4logr/README.md b/vendor/github.com/wiggin77/logrus4logr/README.md deleted file mode 100644 index fa891ee719..0000000000 --- a/vendor/github.com/wiggin77/logrus4logr/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# logrus4logr - -[![GoDoc](https://godoc.org/github.com/wiggin77/logrus4logr?status.svg)](https://godoc.org/github.com/wiggin77/logrus4logr) - -Provides adapters for using [Logrus](https://github.com/sirupsen/logrus) hooks and formatters with [Logr](https://github.com/wiggin77/logr). - -While Logrus hooks and formatters can easily be modified to work directly with Logr, these adapters are provided for convenience. - -## Hooks - -A Logrus hook can be adapted to a Logr target. The example below uses [LFSHook](https://github.com/rifflock/lfshook). -More examples can be found [here](./test/cmd). - -```go -package main -import ( - "github.com/rifflock/lfshook" - "github.com/sirupsen/logrus" - "github.com/wiggin77/logr" - "github.com/wiggin77/logrus4logr" -) - -func main() { - var lgr = &logr.Logr{} - - // create a Local File System Hook (LFSHook) - pathMap := lfshook.PathMap{ - logrus.InfoLevel: "./info.log", - logrus.WarnLevel: "./warn.log", - logrus.ErrorLevel: "./error.log", - } - lfsHook := lfshook.NewHook(pathMap, &logrus.JSONFormatter{}) - - // log severity Info or higher. - filter := &logr.StdFilter{Lvl: logr.Info} - - // create adapter wrapping lfshook. - target := logrus4logr.NewAdapterTarget(filter, nil, lfsHook, 1000) - lgr.AddTarget(target) - - // log stuff! - logger := lgr.NewLogger().WithField("status", "woot!") - - logger.Info("I'm hooked on Logr") - logger.WithField("code", 501).Error("Request failed") - - lgr.Shutdown() -} -``` - -## Formatters - -A Logrus formatter can be used by Logr via an adapter. The example below uses Logrus' built-in TextFormatter. -More examples can be found [here](./test/cmd). - -```go -package main -import ( - "github.com/sirupsen/logrus" - "github.com/wiggin77/logr" - "github.com/wiggin77/logrus4logr" -) - -func main() { - var lgr = &logr.Logr{} - - // create a Logrus TextFormatter with whatever settings you prefer. - logrusFormatter := &logrus.TextFormatter{ - // settings... - } - - // log severity Info or higher. - filter := &logr.StdFilter{Lvl: logr.Info} - - // wrap TextFormatter in Logr adapter. - formatter := &logrus4logr.FAdapter{Fmtr: logrusFormatter} - - // create writer target to stdout using adapter. - var t logr.Target - t = target.NewWriterTarget(filter, formatter, os.Stdout, 1000) - lgr.AddTarget(t) - - // log stuff! - logger := lgr.NewLogger().WithField("status", "woot!") - - logger.Info("I'm hooked on Logr") - logger.WithField("code", 501).Error("Request failed") - - lgr.Shutdown() -} -``` diff --git a/vendor/github.com/wiggin77/logrus4logr/convert.go b/vendor/github.com/wiggin77/logrus4logr/convert.go deleted file mode 100644 index e1ad8fd4dc..0000000000 --- a/vendor/github.com/wiggin77/logrus4logr/convert.go +++ /dev/null @@ -1,51 +0,0 @@ -package logrus4logr - -import ( - "github.com/wiggin77/logr" - - "github.com/sirupsen/logrus" -) - -func convertLogRec(rec *logr.LogRec, rus *logrus.Logger) *logrus.Entry { - entry := &logrus.Entry{ - Logger: rus, - Data: convertFields(rec.Fields()), - Time: rec.Time(), - Level: convertLevel(rec.Level()), - //Caller: *runtime.Frame - Message: rec.Msg(), - //Buffer *bytes.Buffer - //Context context.Context - //err string - } - return entry -} - -func convertLevel(lvl logr.Level) logrus.Level { - switch lvl { - case logr.Panic: - return logrus.PanicLevel - case logr.Fatal: - return logrus.FatalLevel - case logr.Error: - return logrus.ErrorLevel - case logr.Warn: - return logrus.WarnLevel - case logr.Info: - return logrus.InfoLevel - case logr.Debug: - return logrus.DebugLevel - case logr.Trace: - return logrus.TraceLevel - default: - return logrus.InfoLevel - } -} - -func convertFields(flds logr.Fields) logrus.Fields { - f := make(logrus.Fields, len(flds)) - for k, v := range flds { - f[k] = v - } - return f -} diff --git a/vendor/github.com/wiggin77/logrus4logr/formatter.go b/vendor/github.com/wiggin77/logrus4logr/formatter.go deleted file mode 100644 index 3e4521dc4f..0000000000 --- a/vendor/github.com/wiggin77/logrus4logr/formatter.go +++ /dev/null @@ -1,36 +0,0 @@ -package logrus4logr - -import ( - "bytes" - "sync" - - "github.com/sirupsen/logrus" - "github.com/wiggin77/logr" -) - -// FAdapter wraps a Logrus formatter so it can be used as a Logr formatter. -type FAdapter struct { - // Fmtr is the Logrus formatter to wrap. - Fmtr logrus.Formatter - - // Logger is an optional logrus.Logger instance to use instead of the default. - Logger *logrus.Logger - - once sync.Once -} - -// Format converts a log record to bytes using a Logrus formatter. -func (a *FAdapter) Format(rec *logr.LogRec, stacktrace bool, buf *bytes.Buffer) (*bytes.Buffer, error) { - a.once.Do(func() { - if a.Logger == nil { - a.Logger = logrus.StandardLogger() - } - }) - entry := convertLogRec(rec, a.Logger) - - data, err := a.Fmtr.Format(entry) - if err == nil { - buf.Write(data) - } - return buf, err -} diff --git a/vendor/github.com/wiggin77/logrus4logr/go.mod b/vendor/github.com/wiggin77/logrus4logr/go.mod deleted file mode 100644 index 0d08496cff..0000000000 --- a/vendor/github.com/wiggin77/logrus4logr/go.mod +++ /dev/null @@ -1,15 +0,0 @@ -module github.com/wiggin77/logrus4logr - -go 1.13 - -require ( - github.com/Freman/eventloghook v0.0.0-20191003051739-e4d803b6b48b - github.com/antonfisher/nested-logrus-formatter v1.0.2 - github.com/joonix/log v0.0.0-20190524090622-13fe31bbdd7a - github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect - github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 - github.com/sirupsen/logrus v1.4.2 - github.com/wiggin77/logr v1.0.3 - golang.org/x/sys v0.0.0-20191008105621-543471e840be - google.golang.org/genproto v0.0.0-20191007204434-a023cd5227bd // indirect -) diff --git a/vendor/github.com/wiggin77/logrus4logr/go.sum b/vendor/github.com/wiggin77/logrus4logr/go.sum deleted file mode 100644 index 6bc219f910..0000000000 --- a/vendor/github.com/wiggin77/logrus4logr/go.sum +++ /dev/null @@ -1,218 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Freman/eventloghook v0.0.0-20191003051739-e4d803b6b48b h1:IltY1fRcdIshI/c8KOdmaO8P4lBwDXHJYPymMisvvDs= -github.com/Freman/eventloghook v0.0.0-20191003051739-e4d803b6b48b/go.mod h1:VGwG8f2pQ8SAFjTSH3PEDmLdlvi0XTd7a4C4AZn+pVw= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/antonfisher/nested-logrus-formatter v1.0.2 h1:t65eOqj0fWbOkZR2+OgmxPa0KYIwbPhKdYmseaCMIyI= -github.com/antonfisher/nested-logrus-formatter v1.0.2/go.mod h1:6WTfyWFkBc9+zyBaKIqRrg/KwMqBbodBjgbHjDz7zjA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/joonix/log v0.0.0-20190524090622-13fe31bbdd7a h1:LL1gwNo4Z1LG68SaaNb8bxB+YnMSilYzytRfkF3AigE= -github.com/joonix/log v0.0.0-20190524090622-13fe31bbdd7a/go.mod h1:fS54ONkjDV71zS9CDx3V9K21gJg7byKSvI4ajuWFNJw= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/nsf/jsondiff v0.0.0-20190712045011-8443391ee9b6/go.mod h1:uFMI8w+ref4v2r9jz+c9i1IfIttS/OkmLfrk1jne5hs= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo= -github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= -github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/wiggin77/cfg v1.0.2 h1:NBUX+iJRr+RTncTqTNvajHwzduqbhCQjEqxLHr6Fk7A= -github.com/wiggin77/cfg v1.0.2/go.mod h1:b3gotba2e5bXTqTW48DwIFoLc+4lWKP7WPi/CdvZ4aE= -github.com/wiggin77/logr v0.0.0-20191008153504-baac1b801e73 h1:lRao0Wc0zDcje991m1OQzCDXDhJ2dAU2J+214tEoUdQ= -github.com/wiggin77/logr v0.0.0-20191008153504-baac1b801e73/go.mod h1:VZeJzSbyHqC3zInXnFBJZURn9rGbqlTzlO2m5wdijZ8= -github.com/wiggin77/logr v0.0.0-20191009035425-189ce7304c34 h1:XhYLDM920VmlED8oElS+0/odwPeH3qkkmlvS0VVwCPE= -github.com/wiggin77/logr v0.0.0-20191009035425-189ce7304c34/go.mod h1:VZeJzSbyHqC3zInXnFBJZURn9rGbqlTzlO2m5wdijZ8= -github.com/wiggin77/logr v0.0.0-20191011233000-e3bc20703517 h1:vdjEWflo0H1hEt2Iw9A3aqtCWx8dnUmIYstZtLsF2Hg= -github.com/wiggin77/logr v0.0.0-20191011233000-e3bc20703517/go.mod h1:9sOJ1T4F2YdtgMrMaq9I1PiTV8R6wKModG5qZH+ba/s= -github.com/wiggin77/logr v0.0.0-20191014204114-2df550845cfc h1:ZTtN7Tg+n2OAhQTy++YLQBl52pdUyOWPXTB6wjFdb5g= -github.com/wiggin77/logr v0.0.0-20191014204114-2df550845cfc/go.mod h1:9sOJ1T4F2YdtgMrMaq9I1PiTV8R6wKModG5qZH+ba/s= -github.com/wiggin77/logr v0.0.0-20200207002347-890d83b925be h1:lGz7zKuDckJCH48b4YCEV8nNOmETu6bW3CCws7/Euvc= -github.com/wiggin77/logr v0.0.0-20200207002347-890d83b925be/go.mod h1:oIvnsSkyTQojUsr7QO0d4rE2afZbsTj/5WbiikGJu3E= -github.com/wiggin77/logr v0.0.0-20200207172336-0c93e6357eb5 h1:PahhDMzc5XrJg/mgT87Aav4npUCkA5cBGyN9WQw3GVY= -github.com/wiggin77/logr v0.0.0-20200207172336-0c93e6357eb5/go.mod h1:oIvnsSkyTQojUsr7QO0d4rE2afZbsTj/5WbiikGJu3E= -github.com/wiggin77/logr v0.0.0-20200207192333-388c3fe88257 h1:SusN+cM1cWx20H9vv4N3dQUIlhfncUxLi8lokmo8ZUs= -github.com/wiggin77/logr v0.0.0-20200207192333-388c3fe88257/go.mod h1:oIvnsSkyTQojUsr7QO0d4rE2afZbsTj/5WbiikGJu3E= -github.com/wiggin77/logr v1.0.0 h1:i0hCQjlUpwBYdcu7iqf3hQCNIH9uf9Y2jbwcReNPscc= -github.com/wiggin77/logr v1.0.0/go.mod h1:oIvnsSkyTQojUsr7QO0d4rE2afZbsTj/5WbiikGJu3E= -github.com/wiggin77/logr v1.0.2 h1:zNuYJ+UABevEFhvlEi/MXGYiZgVrMmUJPPt60xmByBs= -github.com/wiggin77/logr v1.0.2/go.mod h1:oIvnsSkyTQojUsr7QO0d4rE2afZbsTj/5WbiikGJu3E= -github.com/wiggin77/logr v1.0.3 h1:4Cj899GZJInB9vudlxsmLRDsBlsw9pE/nyJo9XZ/yzo= -github.com/wiggin77/logr v1.0.3/go.mod h1:oIvnsSkyTQojUsr7QO0d4rE2afZbsTj/5WbiikGJu3E= -github.com/wiggin77/merror v1.0.2 h1:V0nH9eFp64ASyaXC+pB5WpvBoCg7NUwvaCSKdzlcHqw= -github.com/wiggin77/merror v1.0.2/go.mod h1:uQTcIU0Z6jRK4OwqganPYerzQxSFJ4GSHM3aurxxQpg= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69 h1:4rNOqY4ULrKzS6twXa619uQgI7h9PaVd4ZhjFQ7C5zs= -google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20191007204434-a023cd5227bd h1:84VQPzup3IpKLxuIAZjHMhVjJ8fZ4/i3yUnj3k6fUdw= -google.golang.org/genproto v0.0.0-20191007204434-a023cd5227bd/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/vendor/github.com/wiggin77/logrus4logr/target.go b/vendor/github.com/wiggin77/logrus4logr/target.go deleted file mode 100644 index 5a33fba9c4..0000000000 --- a/vendor/github.com/wiggin77/logrus4logr/target.go +++ /dev/null @@ -1,44 +0,0 @@ -package logrus4logr - -import ( - "fmt" - - "github.com/wiggin77/logr" - - "github.com/sirupsen/logrus" -) - -// TAdapter wraps a Logrus hook allowing the hook be used as a Logr target. -// Create instances with `NewAdapterTarget`. -type TAdapter struct { - logr.Basic - hook logrus.Hook - - // Logger is an optional logrus.Logger instance to use instead of the default. - Logger *logrus.Logger -} - -// NewAdapterTarget creates a target wrapper for a Logrus hook. -// If filter and/or formatter are nil then defaults will be used (Panic level; Plain formatter). -func NewAdapterTarget(filter logr.Filter, formatter logr.Formatter, hook logrus.Hook, maxQueue int) *TAdapter { - a := &TAdapter{hook: hook} - a.Basic.Start(a, a, filter, formatter, maxQueue) - return a -} - -// Write converts a log record to a Logrus entry and -// passes it to the Logrus hook. -func (a *TAdapter) Write(rec *logr.LogRec) error { - rus := a.Logger - if rus == nil { - rus = logrus.StandardLogger() - } - - entry := convertLogRec(rec, rus) - return a.hook.Fire(entry) -} - -// String returns the type name of the Logrus hook. -func (a *TAdapter) String() string { - return fmt.Sprintf("%T", a.hook) -} diff --git a/vendor/modules.txt b/vendor/modules.txt index 1ec3d1b5e9..40d264f50a 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -227,8 +227,6 @@ github.com/sean-/seed github.com/segmentio/analytics-go # github.com/segmentio/backo-go v0.0.0-20160424052352-204274ad699c github.com/segmentio/backo-go -# github.com/shinji62/logrus-syslog-ng v0.0.0-20180605090607-3974ebb047a0 -github.com/shinji62/logrus-syslog-ng # github.com/sirupsen/logrus v1.4.2 github.com/sirupsen/logrus # github.com/spf13/afero v1.2.2 @@ -282,11 +280,10 @@ github.com/uber/jaeger-lib/metrics github.com/wiggin77/cfg github.com/wiggin77/cfg/ini github.com/wiggin77/cfg/timeconv -# github.com/wiggin77/logr v1.0.3 +# github.com/wiggin77/logr v1.0.4 github.com/wiggin77/logr github.com/wiggin77/logr/format -# github.com/wiggin77/logrus4logr v1.0.2 -github.com/wiggin77/logrus4logr +github.com/wiggin77/logr/target # github.com/wiggin77/merror v1.0.2 github.com/wiggin77/merror # github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c diff --git a/web/context.go b/web/context.go index 901da0f232..d3859f0612 100644 --- a/web/context.go +++ b/web/context.go @@ -42,22 +42,10 @@ func (c *Context) LogAuditRecWithLevel(rec *audit.Record, level audit.Level) { } rec.Fail() } - c.App.Srv().Audit.LogRecord(level, *rec) -} - -// LogAuditMeta creates an audit record and logs it. -func (c *Context) LogAuditEx(event string, status string) { - rec := c.MakeAuditRecord(event, status) - c.LogAuditRec(rec) -} - -// LogAuditMeta creates an audit record with metadata and logs it. -func (c *Context) LogAuditMeta(event string, status string, meta audit.Meta) { - rec := c.MakeAuditRecord(event, status) - if meta != nil { - rec.Meta = meta + if cid := c.App.GetClusterId(); cid != "" { + rec.AddMeta(audit.KeyClusterID, cid) } - c.LogAuditRec(rec) + c.App.Srv().Audit.LogRecord(level, *rec) } // MakeAuditRecord creates a audit record pre-populated with data from this context.