diff --git a/config/config.go b/config/config.go index 896717d..505ec28 100644 --- a/config/config.go +++ b/config/config.go @@ -20,6 +20,7 @@ const ( DATA_SECRET_KEY_DEFAULT = "flogo" ENV_APP_PROPERTY_OVERRIDE_KEY = "FLOGO_APP_PROPS_OVERRIDE" ENV_APP_PROPERTY_RESOLVER_KEY = "FLOGO_APP_PROPS_VALUE_RESOLVER" + ENV_LOG_LEVEL_OVERRIDE_KEY = "FLOGO_CONTRIB_LOG_LEVEL_OVERRIDE" ) var defaultLogLevel = LOG_LEVEL_DEFAULT @@ -95,3 +96,11 @@ func GetAppPropertiesValueResolver() string { } return "" } + +func GetContribLogLevelOverride() string { + key := os.Getenv(ENV_LOG_LEVEL_OVERRIDE_KEY) + if len(key) > 0 { + return key + } + return "" +} diff --git a/logger/logfactory.go b/logger/logfactory.go index b24fffe..a8a5171 100644 --- a/logger/logfactory.go +++ b/logger/logfactory.go @@ -6,9 +6,11 @@ import ( "github.com/sirupsen/logrus" "github.com/TIBCOSoftware/flogo-lib/config" + "strings" ) var loggerMap = make(map[string]Logger) +var overrideLogLevelMap = make(map[string]Level) var mutex = &sync.RWMutex{} var logLevel = InfoLevel var logFormat = "TEXT" @@ -29,6 +31,24 @@ func init() { logLevel = getLogLevel } + // Gather overridden log levels + overrideValues := config.GetContribLogLevelOverride() + if overrideValues != "" { + for _, pair := range strings.Split(overrideValues, ",") { + kv := strings.Split(pair, "=") + if len(kv) == 2 && kv[0] != "" && kv[1] != "" { + ll, err := GetLevelForName(kv[1]) + if err != nil { + println("'%s' is not valid override value for '%s'. %s", pair, config.ENV_LOG_LEVEL_OVERRIDE_KEY, err.Error()) + } else { + overrideLogLevelMap[kv[0]] = ll + } + } else { + println("'%s' is not valid override value for '%s'. It must be in PropName=PropValue format.", pair, config.ENV_LOG_LEVEL_OVERRIDE_KEY) + } + } + } + logFormat = config.GetLogFormat() } @@ -134,15 +154,15 @@ func (l *DefaultLogger) Errorf(format string, args ...interface{}) { func (l *DefaultLogger) SetLogLevel(logLevel Level) { switch logLevel { case DebugLevel: - l.loggerImpl.Level = logrus.DebugLevel + l.loggerImpl.SetLevel(logrus.DebugLevel) case InfoLevel: - l.loggerImpl.Level = logrus.InfoLevel + l.loggerImpl.SetLevel(logrus.InfoLevel) case ErrorLevel: - l.loggerImpl.Level = logrus.ErrorLevel + l.loggerImpl.SetLevel(logrus.ErrorLevel) case WarnLevel: - l.loggerImpl.Level = logrus.WarnLevel + l.loggerImpl.SetLevel(logrus.WarnLevel) default: - l.loggerImpl.Level = logrus.ErrorLevel + l.loggerImpl.SetLevel(logrus.ErrorLevel) } } @@ -152,6 +172,20 @@ func (l *DefaultLogger) GetLogLevel() Level { return level } +func getLogLevel(loggerName string) Level { + if len(overrideLogLevelMap) > 0 { + // Find overridden log level + for name, loglevel := range overrideLogLevelMap { + // Look for logger which matches given name + if strings.Contains(strings.ToLower(loggerName), strings.ToLower(name)) { + return loglevel + } + } + } + // Return engine log level + return logLevel +} + func (logfactory *DefaultLoggerFactory) GetLogger(name string) Logger { mutex.RLock() l := loggerMap[name] @@ -172,7 +206,7 @@ func (logfactory *DefaultLoggerFactory) GetLogger(name string) Logger { loggerImpl: logImpl, } - l.SetLogLevel(logLevel) + l.SetLogLevel(getLogLevel(name)) mutex.Lock() loggerMap[name] = l diff --git a/logger/logger.go b/logger/logger.go index e19ca36..d2df14d 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -59,7 +59,7 @@ func GetLogger(name string) Logger { func GetLevelForName(name string) (Level, error) { levelForName, ok := levelNames[name] if !ok { - return 0, fmt.Errorf("unsupported Log Level '%s'", name) + return 0, fmt.Errorf("unsupported Log Level '%s'. supported values - [DEBUG ERROR INFO WARN]", name) } return levelForName, nil }