fix(logger): Move extrafields from gelf to global system
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Matthieu 'JP' DERASSE 2023-01-09 22:35:26 +00:00
parent 44ff19e779
commit 8aedb85605
Signed by: mderasse
GPG Key ID: 55141C777B16A705
3 changed files with 31 additions and 14 deletions

View File

@ -8,10 +8,10 @@ import (
const LoggerKey = "mainLogger" const LoggerKey = "mainLogger"
func AddMainLogger(ctx context.Context, logger *logrus.Logger) context.Context { func AddMainLogger(ctx context.Context, logger *logrus.Entry) context.Context {
return context.WithValue(ctx, LoggerKey, logger) return context.WithValue(ctx, LoggerKey, logger)
} }
func GetLogger(ctx context.Context) *logrus.Logger { func GetLogger(ctx context.Context) *logrus.Entry {
return ctx.Value(LoggerKey).(*logrus.Logger) return ctx.Value(LoggerKey).(*logrus.Entry)
} }

View File

@ -26,11 +26,12 @@ const defaultSecretName = "log"
// ConfigStruct represent the configuration of our logger system. // ConfigStruct represent the configuration of our logger system.
type ConfigStruct struct { type ConfigStruct struct {
Level *string `yaml:"level"`
EnableStdOut *bool `yaml:"ensable_std_out"` EnableStdOut *bool `yaml:"ensable_std_out"`
Providers []ProviderName `yaml:"providers"` ExtrasFields map[string]interface{} `yaml:"extra_fields"`
FileConfig *file.ConfigStruct `yaml:"file_config"` FileConfig *file.ConfigStruct `yaml:"file_config"`
GelfConfig *gelf.ConfigStruct `yaml:"gelf_config"` GelfConfig *gelf.ConfigStruct `yaml:"gelf_config"`
Level *string `yaml:"level"`
Providers []ProviderName `yaml:"providers"`
} }
func newDefaultConfig() *ConfigStruct { func newDefaultConfig() *ConfigStruct {
@ -111,6 +112,18 @@ func (c *ConfigStruct) applyEnv() error {
c.Providers = providers c.Providers = providers
} }
// Extra Fields
if v := os.Getenv(fmt.Sprintf("%s%s", envPrefix, "EXTRA_FIELDS")); v != "" {
extraFieldsPart := strings.Split(v, ",")
for _, efp := range extraFieldsPart {
extraFieldKV := strings.SplitN(efp, ":", 1)
if len(extraFieldKV) != 2 {
return errors.NotValidf(fmt.Sprintf("Invalid extra_field %s in environment variable. Should be a key1:value1,key2:value2 format", efp))
}
c.ExtrasFields[extraFieldKV[0]] = extraFieldKV[1]
}
}
return nil return nil
} }

View File

@ -12,7 +12,7 @@ import (
) )
// Init will try to initialize logger by trying to retrieve config from multiple source. // Init will try to initialize logger by trying to retrieve config from multiple source.
func Init() (*logrus.Logger, error) { func Init() (*logrus.Entry, error) {
// loading configuration // loading configuration
c, err := loadConfig() c, err := loadConfig()
@ -24,7 +24,7 @@ func Init() (*logrus.Logger, error) {
} }
// InitFromCustomVaultSecret will initialize logger with a vault secret. // InitFromCustomVaultSecret will initialize logger with a vault secret.
func InitFromCustomVaultSecret(secret string) (*logrus.Logger, error) { func InitFromCustomVaultSecret(secret string) (*logrus.Entry, error) {
c, err := loadConfigFromVault(secret) c, err := loadConfigFromVault(secret)
if err != nil { if err != nil {
@ -35,7 +35,7 @@ func InitFromCustomVaultSecret(secret string) (*logrus.Logger, error) {
} }
// InitFromCustomFile will initialize logger with a config file. // InitFromCustomFile will initialize logger with a config file.
func InitFromCustomFile(path string) (*logrus.Logger, error) { func InitFromCustomFile(path string) (*logrus.Entry, error) {
c, err := loadConfigFromFile(path) c, err := loadConfigFromFile(path)
if err != nil { if err != nil {
@ -45,7 +45,7 @@ func InitFromCustomFile(path string) (*logrus.Logger, error) {
return initFromSource(c) return initFromSource(c)
} }
func initFromSource(c *ConfigStruct) (*logrus.Logger, error) { func initFromSource(c *ConfigStruct) (*logrus.Entry, error) {
err := c.applyEnv() err := c.applyEnv()
if err != nil { if err != nil {
return nil, errors.Trace(err) return nil, errors.Trace(err)
@ -57,7 +57,7 @@ func initFromSource(c *ConfigStruct) (*logrus.Logger, error) {
} }
// InitFromCustomConfig will initialize logger from a gaven config. // InitFromCustomConfig will initialize logger from a gaven config.
func InitFromCustomConfig(c *ConfigStruct) (*logrus.Logger, error) { func InitFromCustomConfig(c *ConfigStruct) (*logrus.Entry, error) {
err := c.IsValid() err := c.IsValid()
if err != nil { if err != nil {
@ -100,5 +100,9 @@ func InitFromCustomConfig(c *ConfigStruct) (*logrus.Logger, error) {
} }
} }
return log, nil return c.applyExtraFields(logrus.NewEntry(log)), nil
}
func (c *ConfigStruct) applyExtraFields(l *logrus.Entry) *logrus.Entry {
return l.WithFields(c.ExtrasFields)
} }