toCapaLogLevel(String logLevelArg) {
+ return Arrays.stream(CapaLogLevel.values())
+ .filter(logLevel -> logLevel.levelName.equalsIgnoreCase(logLevelArg))
+ .findAny();
+ }
+
+ /**
+ * Get level.
+ *
+ * @return
+ */
+ public int getLevel() {
+ return level;
+ }
+
+ public String getLevelName() {
+ return levelName;
+ }
+}
diff --git a/sdk-component/src/main/java/group/rxcloud/capa/component/log/manager/LogManager.java b/sdk-component/src/main/java/group/rxcloud/capa/component/log/manager/LogManager.java
new file mode 100644
index 0000000..fba8605
--- /dev/null
+++ b/sdk-component/src/main/java/group/rxcloud/capa/component/log/manager/LogManager.java
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package group.rxcloud.capa.component.log.manager;
+
+import group.rxcloud.capa.component.log.configuration.LogSwitchConfiguration;
+import group.rxcloud.capa.component.log.enums.CapaLogLevel;
+
+import java.util.Map;
+
+/**
+ * LogManager, to manage log output levels.
+ */
+public class LogManager {
+
+ /**
+ * Dynamically adjust the log level switch name.
+ */
+ private static final String LOG_LEVEL_SWITCH_NAME = "logLevelSwitch";
+ /**
+ * All level switch name.
+ */
+ private static final String ALL_LEVEL_SWITCH_NAME = "allLevelSwitch";
+ /**
+ * Trace level switch name.
+ */
+ private static final String TRACE_LEVEL_SWITCH_NAME = "traceLevelSwitch";
+ /**
+ * Debug level switch name.
+ */
+ private static final String DEBUG_LEVEL_SWITCH_NAME = "debugLevelSwitch";
+ /**
+ * Info level switch name.
+ */
+ private static final String INFO_LEVEL_SWITCH_NAME = "infoLevelSwitch";
+ /**
+ * Warn level switch.
+ */
+ private static final String WARN_LEVEL_SWITCH_NAME = "warnLevelSwitch";
+ /**
+ * Error level switch.
+ */
+ private static final String ERROR_LEVEL_SWITCH_NAME = "errorLevelSwitch";
+ /**
+ * Fatal level switch
+ */
+ private static final String FATAL_LEVEL_SWITCH_NAME = "fatalLevelSwitch";
+ /**
+ * Off level switch.
+ */
+ private static final String OFF_LEVEL_SWITCH_NAME = "offLevelSwitch";
+
+ /**
+ * Whether logs can be output.
+ * If there is no corresponding configuration information or the switch of dynamic configuration log level is set to false,
+ * then only logs of info level and above will be output.
+ *
+ * If the value of the dynamic configuration log level switch is true, only the log with the log level configured as true will be output.
+ *
+ * If the log level is not in the {@link CapaLogLevel#values()}, the log is not output.
+ *
+ * @param capaLogLevel
+ * @return If the log can be output, it is true, otherwise it is false.
+ */
+ public static Boolean whetherLogsCanBeOutput(CapaLogLevel capaLogLevel) {
+ Map logsSwitchConfigs = LogSwitchConfiguration.getLogsSwitchConfig();
+ //no configuration instance or logs switch configuration, then follow the default logic.
+ if (logsSwitchConfigs == null
+ || logsSwitchConfigs.isEmpty()
+ || Boolean.FALSE.equals(logsSwitchConfigs.get(LOG_LEVEL_SWITCH_NAME))) {
+ return isLogsLevelClosedWithDefault(capaLogLevel);
+ }
+
+ switch (capaLogLevel) {
+ case ALL:
+ return logsSwitchConfigs.get(ALL_LEVEL_SWITCH_NAME) == null
+ ? Boolean.FALSE
+ : logsSwitchConfigs.get(ALL_LEVEL_SWITCH_NAME);
+ case TRACE:
+ return logsSwitchConfigs.get(TRACE_LEVEL_SWITCH_NAME) == null
+ ? Boolean.FALSE
+ : logsSwitchConfigs.get(TRACE_LEVEL_SWITCH_NAME);
+ case DEBUG:
+ return logsSwitchConfigs.get(DEBUG_LEVEL_SWITCH_NAME) == null
+ ? Boolean.FALSE
+ : logsSwitchConfigs.get(DEBUG_LEVEL_SWITCH_NAME);
+ case INFO:
+ return logsSwitchConfigs.get(INFO_LEVEL_SWITCH_NAME) == null
+ ? Boolean.TRUE
+ : logsSwitchConfigs.get(INFO_LEVEL_SWITCH_NAME);
+ case WARN:
+ return logsSwitchConfigs.get(WARN_LEVEL_SWITCH_NAME) == null
+ ? Boolean.TRUE
+ : logsSwitchConfigs.get(WARN_LEVEL_SWITCH_NAME);
+ case ERROR:
+ return logsSwitchConfigs.get(ERROR_LEVEL_SWITCH_NAME) == null
+ ? Boolean.TRUE
+ : logsSwitchConfigs.get(ERROR_LEVEL_SWITCH_NAME);
+ case FATAL:
+ return logsSwitchConfigs.get(FATAL_LEVEL_SWITCH_NAME) == null
+ ? Boolean.TRUE
+ : logsSwitchConfigs.get(FATAL_LEVEL_SWITCH_NAME);
+ case OFF:
+ return logsSwitchConfigs.get(OFF_LEVEL_SWITCH_NAME) == null
+ ? Boolean.TRUE
+ : logsSwitchConfigs.get(OFF_LEVEL_SWITCH_NAME) == null;
+ default:
+ return Boolean.FALSE;
+ }
+ }
+
+ /**
+ * Logs of the {@link CapaLogLevel#INFO} level or higher are normally output, but logs of the {@link CapaLogLevel#INFO} level lower are not output.
+ *
+ * @param capaLogLevel
+ * @return whether the capaLogLevel's priority is equal or more then {@link CapaLogLevel#INFO}.
+ */
+ private static Boolean isLogsLevelClosedWithDefault(CapaLogLevel capaLogLevel) {
+ return capaLogLevel.getLevel() >= CapaLogLevel.INFO.getLevel();
+ }
+}
diff --git a/sdk-component/src/test/java/group/rxcloud/capa/component/log/agent/CapaLogbackAppenderAgentTest.java b/sdk-component/src/test/java/group/rxcloud/capa/component/log/agent/CapaLogbackAppenderAgentTest.java
index 16b61fc..e8f3759 100644
--- a/sdk-component/src/test/java/group/rxcloud/capa/component/log/agent/CapaLogbackAppenderAgentTest.java
+++ b/sdk-component/src/test/java/group/rxcloud/capa/component/log/agent/CapaLogbackAppenderAgentTest.java
@@ -16,8 +16,7 @@
*/
package group.rxcloud.capa.component.log.agent;
-import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.message.Message;
+import ch.qos.logback.classic.spi.ILoggingEvent;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -33,10 +32,8 @@ void testBuildCapaLogbackAppender() {
@Test
void testAppend() {
CapaLogbackAppenderAgent.CapaLogbackAppender capaLogbackAppender = CapaLogbackAppenderAgent.buildCapaLogbackAppender();
- LogEvent logEvent = Mockito.mock(LogEvent.class);
- Message message = Mockito.mock(Message.class);
- Mockito.when(logEvent.getMessage()).thenReturn(Mockito.mock(Message.class));
- Mockito.when(message.getFormattedMessage()).thenReturn("TEST");
+ ILoggingEvent logEvent = Mockito.mock(ILoggingEvent.class);
+ Mockito.when(logEvent.getFormattedMessage()).thenReturn("TEST");
capaLogbackAppender.appendLog(logEvent);
}
}
\ No newline at end of file
diff --git a/sdk-component/src/test/java/group/rxcloud/capa/component/log/agent/TestCapaLogbackAppender.java b/sdk-component/src/test/java/group/rxcloud/capa/component/log/agent/TestCapaLogbackAppender.java
index af58bcd..67f911f 100644
--- a/sdk-component/src/test/java/group/rxcloud/capa/component/log/agent/TestCapaLogbackAppender.java
+++ b/sdk-component/src/test/java/group/rxcloud/capa/component/log/agent/TestCapaLogbackAppender.java
@@ -16,19 +16,19 @@
*/
package group.rxcloud.capa.component.log.agent;
-import org.apache.logging.log4j.core.LogEvent;
+import ch.qos.logback.classic.spi.ILoggingEvent;
/**
* The capa logback appender used in tests only.
*/
-public class TestCapaLogbackAppender implements CapaLogbackAppenderAgent.CapaLogbackAppender {
+public class TestCapaLogbackAppender implements CapaLogbackAppenderAgent.CapaLogbackAppender {
public TestCapaLogbackAppender() {
}
@Override
- public void appendLog(LogEvent event) {
- System.out.println("test logback log and content is " + event.getMessage().getFormattedMessage());
+ public void appendLog(ILoggingEvent event) {
+ System.out.println("test logback log and content is " + event.getFormattedMessage());
}
}
diff --git a/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/log/DemoLog4jAppender.java b/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/log/DemoLog4jAppender.java
index ccf07cc..f94df0f 100644
--- a/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/log/DemoLog4jAppender.java
+++ b/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/log/DemoLog4jAppender.java
@@ -23,6 +23,6 @@ public class DemoLog4jAppender implements CapaLog4jAppenderAgent.CapaLog4jAppend
@Override
public void appendLog(LogEvent event) {
- System.out.println("test log log4j and content is " + event.getMessage().getFormattedMessage());
+ System.out.println("Test log log4j and content is " + event.getMessage().getFormattedMessage());
}
}
diff --git a/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/log/DemoLogbackAppender.java b/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/log/DemoLogbackAppender.java
index c6029cd..8e5ee40 100644
--- a/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/log/DemoLogbackAppender.java
+++ b/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/log/DemoLogbackAppender.java
@@ -19,13 +19,13 @@
import ch.qos.logback.classic.spi.ILoggingEvent;
import group.rxcloud.capa.component.log.agent.CapaLogbackAppenderAgent;
-public class DemoLogbackAppender implements CapaLogbackAppenderAgent.CapaLogbackAppender {
+public class DemoLogbackAppender implements CapaLogbackAppenderAgent.CapaLogbackAppender {
public DemoLogbackAppender() {
}
@Override
public void appendLog(ILoggingEvent event) {
- System.out.println("test logback log and content is " + event.getFormattedMessage());
+ System.out.println("Test logback log and content is " + event.getFormattedMessage());
}
}