chore(message): Add option to redact contents of messages in logs (#719)
This commit is contained in:
parent
131e8a156b
commit
a35fc9fbd2
|
@ -179,6 +179,7 @@ log:
|
||||||
error_log: "stderr" # stderr: output to console, or define log path like "log/error_log"
|
error_log: "stderr" # stderr: output to console, or define log path like "log/error_log"
|
||||||
error_level: "error"
|
error_level: "error"
|
||||||
hide_token: true
|
hide_token: true
|
||||||
|
hide_messages: false
|
||||||
|
|
||||||
stat:
|
stat:
|
||||||
engine: "memory" # support memory, redis, boltdb, buntdb or leveldb
|
engine: "memory" # support memory, redis, boltdb, buntdb or leveldb
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
)
|
)
|
||||||
|
|
||||||
//nolint
|
// nolint
|
||||||
var defaultConf = []byte(`
|
var defaultConf = []byte(`
|
||||||
core:
|
core:
|
||||||
enabled: true # enable httpd server
|
enabled: true # enable httpd server
|
||||||
|
@ -98,6 +98,7 @@ log:
|
||||||
error_log: "stderr" # stderr: output to console, or define log path like "log/error_log"
|
error_log: "stderr" # stderr: output to console, or define log path like "log/error_log"
|
||||||
error_level: "error"
|
error_level: "error"
|
||||||
hide_token: true
|
hide_token: true
|
||||||
|
hide_messages: false
|
||||||
|
|
||||||
stat:
|
stat:
|
||||||
engine: "memory" # support memory, redis, boltdb, buntdb or leveldb
|
engine: "memory" # support memory, redis, boltdb, buntdb or leveldb
|
||||||
|
@ -202,12 +203,13 @@ type SectionIos struct {
|
||||||
|
|
||||||
// SectionLog is sub section of config.
|
// SectionLog is sub section of config.
|
||||||
type SectionLog struct {
|
type SectionLog struct {
|
||||||
Format string `yaml:"format"`
|
Format string `yaml:"format"`
|
||||||
AccessLog string `yaml:"access_log"`
|
AccessLog string `yaml:"access_log"`
|
||||||
AccessLevel string `yaml:"access_level"`
|
AccessLevel string `yaml:"access_level"`
|
||||||
ErrorLog string `yaml:"error_log"`
|
ErrorLog string `yaml:"error_log"`
|
||||||
ErrorLevel string `yaml:"error_level"`
|
ErrorLevel string `yaml:"error_level"`
|
||||||
HideToken bool `yaml:"hide_token"`
|
HideToken bool `yaml:"hide_token"`
|
||||||
|
HideMessages bool `yaml:"hide_messages"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// SectionStat is sub section of config.
|
// SectionStat is sub section of config.
|
||||||
|
@ -397,6 +399,7 @@ func LoadConf(confPath ...string) (*ConfYaml, error) {
|
||||||
conf.Log.ErrorLog = viper.GetString("log.error_log")
|
conf.Log.ErrorLog = viper.GetString("log.error_log")
|
||||||
conf.Log.ErrorLevel = viper.GetString("log.error_level")
|
conf.Log.ErrorLevel = viper.GetString("log.error_level")
|
||||||
conf.Log.HideToken = viper.GetBool("log.hide_token")
|
conf.Log.HideToken = viper.GetBool("log.hide_token")
|
||||||
|
conf.Log.HideMessages = viper.GetBool("log.hide_messages")
|
||||||
|
|
||||||
// Queue Engine
|
// Queue Engine
|
||||||
conf.Queue.Engine = viper.GetString("queue.engine")
|
conf.Queue.Engine = viper.GetString("queue.engine")
|
||||||
|
|
|
@ -119,6 +119,7 @@ func (suite *ConfigTestSuite) TestValidateConfDefault() {
|
||||||
assert.Equal(suite.T(), "stderr", suite.ConfGorushDefault.Log.ErrorLog)
|
assert.Equal(suite.T(), "stderr", suite.ConfGorushDefault.Log.ErrorLog)
|
||||||
assert.Equal(suite.T(), "error", suite.ConfGorushDefault.Log.ErrorLevel)
|
assert.Equal(suite.T(), "error", suite.ConfGorushDefault.Log.ErrorLevel)
|
||||||
assert.Equal(suite.T(), true, suite.ConfGorushDefault.Log.HideToken)
|
assert.Equal(suite.T(), true, suite.ConfGorushDefault.Log.HideToken)
|
||||||
|
assert.Equal(suite.T(), false, suite.ConfGorushDefault.Log.HideMessages)
|
||||||
|
|
||||||
assert.Equal(suite.T(), "memory", suite.ConfGorushDefault.Stat.Engine)
|
assert.Equal(suite.T(), "memory", suite.ConfGorushDefault.Stat.Engine)
|
||||||
assert.Equal(suite.T(), false, suite.ConfGorushDefault.Stat.Redis.Cluster)
|
assert.Equal(suite.T(), false, suite.ConfGorushDefault.Stat.Redis.Cluster)
|
||||||
|
|
|
@ -84,6 +84,7 @@ log:
|
||||||
error_log: "stderr" # stderr: output to console, or define log path like "log/error_log"
|
error_log: "stderr" # stderr: output to console, or define log path like "log/error_log"
|
||||||
error_level: "error"
|
error_level: "error"
|
||||||
hide_token: true
|
hide_token: true
|
||||||
|
hide_messages: false
|
||||||
|
|
||||||
stat:
|
stat:
|
||||||
engine: "memory" # support memory, redis, boltdb, buntdb or leveldb
|
engine: "memory" # support memory, redis, boltdb, buntdb or leveldb
|
||||||
|
|
26
logx/log.go
26
logx/log.go
|
@ -33,7 +33,7 @@ type LogPushEntry struct {
|
||||||
|
|
||||||
var isTerm bool
|
var isTerm bool
|
||||||
|
|
||||||
//nolint
|
// nolint
|
||||||
func init() {
|
func init() {
|
||||||
isTerm = isatty.IsTerminal(os.Stdout.Fd())
|
isTerm = isatty.IsTerminal(os.Stdout.Fd())
|
||||||
}
|
}
|
||||||
|
@ -175,26 +175,32 @@ func GetLogPushEntry(input *InputLog) LogPushEntry {
|
||||||
token = hideToken(input.Token, 10)
|
token = hideToken(input.Token, 10)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message := input.Message
|
||||||
|
if input.HideMessage {
|
||||||
|
message = "(message redacted)"
|
||||||
|
}
|
||||||
|
|
||||||
return LogPushEntry{
|
return LogPushEntry{
|
||||||
ID: input.ID,
|
ID: input.ID,
|
||||||
Type: input.Status,
|
Type: input.Status,
|
||||||
Platform: plat,
|
Platform: plat,
|
||||||
Token: token,
|
Token: token,
|
||||||
Message: input.Message,
|
Message: message,
|
||||||
Error: errMsg,
|
Error: errMsg,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// InputLog log request
|
// InputLog log request
|
||||||
type InputLog struct {
|
type InputLog struct {
|
||||||
ID string
|
ID string
|
||||||
Status string
|
Status string
|
||||||
Token string
|
Token string
|
||||||
Message string
|
Message string
|
||||||
Platform int
|
Platform int
|
||||||
Error error
|
Error error
|
||||||
HideToken bool
|
HideToken bool
|
||||||
Format string
|
HideMessage bool
|
||||||
|
Format string
|
||||||
}
|
}
|
||||||
|
|
||||||
// LogPush record user push request and server response.
|
// LogPush record user push request and server response.
|
||||||
|
|
|
@ -154,6 +154,10 @@ func TestLogPushEntry(t *testing.T) {
|
||||||
in.Token = "1234567890"
|
in.Token = "1234567890"
|
||||||
in.HideToken = true
|
in.HideToken = true
|
||||||
assert.Equal(t, "**********", GetLogPushEntry(&in).Token)
|
assert.Equal(t, "**********", GetLogPushEntry(&in).Token)
|
||||||
|
|
||||||
|
in.Message = "hellothisisamessage"
|
||||||
|
in.HideMessage = true
|
||||||
|
assert.Equal(t, "(message redacted)", GetLogPushEntry(&in).Message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLogPush(t *testing.T) {
|
func TestLogPush(t *testing.T) {
|
||||||
|
|
|
@ -234,13 +234,14 @@ Retry:
|
||||||
|
|
||||||
func logPush(cfg *config.ConfYaml, status, token string, req *PushNotification, err error) logx.LogPushEntry {
|
func logPush(cfg *config.ConfYaml, status, token string, req *PushNotification, err error) logx.LogPushEntry {
|
||||||
return logx.LogPush(&logx.InputLog{
|
return logx.LogPush(&logx.InputLog{
|
||||||
ID: req.ID,
|
ID: req.ID,
|
||||||
Status: status,
|
Status: status,
|
||||||
Token: token,
|
Token: token,
|
||||||
Message: req.Message,
|
Message: req.Message,
|
||||||
Platform: req.Platform,
|
Platform: req.Platform,
|
||||||
Error: err,
|
Error: err,
|
||||||
HideToken: cfg.Log.HideToken,
|
HideToken: cfg.Log.HideToken,
|
||||||
Format: cfg.Log.Format,
|
HideMessage: cfg.Log.HideMessages,
|
||||||
|
Format: cfg.Log.Format,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue