CHE_LOGGER_CONFIG=logger1_name=logger1_level,logger2_name=logger2_level + * + *
In case if some logger name or logger level are omitted this pair will be silently ignored.
+ */
+public class EnvironmentVariablesLogLevelPropagator extends ContextAwareBase
+ implements LoggerContextListener, LifeCycle {
+
+ private boolean isStarted;
+
+ @Override
+ public void start() {
+
+ String config = System.getenv("CHE_LOGGER_CONFIG");
+ if (config != null && !config.isEmpty()) {
+ Arrays.stream(config.split(",")).map(String::trim).forEach(this::setLoggerLevel);
+ }
+ isStarted = true;
+ }
+
+ private void setLoggerLevel(String loggerConfig) {
+ String[] parts = loggerConfig.split("=", 2);
+
+ if (parts.length < 2) {
+ return;
+ }
+ String loggerName = parts[0];
+ String levelStr = parts[1];
+
+ if (levelStr.isEmpty() || loggerName.isEmpty()) {
+ return;
+ }
+
+ loggerName = loggerName.trim();
+ levelStr = levelStr.trim();
+
+ LoggerContext lc = (LoggerContext) context;
+
+ Logger logger = lc.getLogger(loggerName);
+ if ("null".equalsIgnoreCase(levelStr)) {
+ logger.setLevel(null);
+ } else {
+ Level level = Level.toLevel(levelStr, null);
+ if (level != null) {
+ logger.setLevel(level);
+ }
+ }
+ }
+
+ @Override
+ public void stop() {
+ isStarted = false;
+ }
+
+ @Override
+ public boolean isStarted() {
+ return isStarted;
+ }
+
+ @Override
+ public boolean isResetResistant() {
+ return false;
+ }
+
+ @Override
+ public void onStart(LoggerContext context) {}
+
+ @Override
+ public void onReset(LoggerContext context) {}
+
+ @Override
+ public void onStop(LoggerContext context) {}
+
+ @Override
+ public void onLevelChange(Logger logger, Level level) {}
+}
diff --git a/wsagent/che-wsagent-core/pom.xml b/wsagent/che-wsagent-core/pom.xml
index 9003a3c82d..c9e915dbb4 100644
--- a/wsagent/che-wsagent-core/pom.xml
+++ b/wsagent/che-wsagent-core/pom.xml
@@ -91,6 +91,16 @@