chore(message): Add option to redact contents of messages in logs (#719)

This commit is contained in:
Ethan Nguyen 2023-02-20 21:00:24 -06:00 committed by GitHub
parent 131e8a156b
commit a35fc9fbd2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 42 additions and 25 deletions

View File

@ -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

View File

@ -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")

View File

@ -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)

View File

@ -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

View File

@ -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.

View File

@ -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) {

View File

@ -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,
}) })
} }