This is an automated email from the ASF dual-hosted git repository.
jianglongtao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new af90e59b5a7 Add shardingsphere-logging-type-logback module (#33012)
af90e59b5a7 is described below
commit af90e59b5a76ef8961c010b6848a282000749e92
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Sep 26 18:09:21 2024 +0800
Add shardingsphere-logging-type-logback module (#33012)
* Add LogbackBuilder
* Add ShardingSphereLogBuilder
* Add shardingsphere-logging-type-logback module
* Add shardingsphere-logging-type-logback module
* Add shardingsphere-logging-type-logback module
* Add shardingsphere-logging-type-logback module
* Add shardingsphere-logging-type-logback module
---
.../logging/spi/ShardingSphereLogBuilder.java | 53 ++++++++++++++++++
kernel/logging/core/pom.xml | 6 ---
.../DefaultLoggingRuleConfigurationBuilder.java | 62 +++-------------------
...DefaultLoggingRuleConfigurationBuilderTest.java | 7 ++-
kernel/logging/pom.xml | 1 +
kernel/logging/{core => type/logback}/pom.xml | 16 +-----
.../logback/ShardingSphereLogbackBuilder.java} | 46 +++++-----------
...dingsphere.logging.spi.ShardingSphereLogBuilder | 18 +++++++
kernel/logging/{ => type}/pom.xml | 7 ++-
proxy/bootstrap/pom.xml | 5 ++
10 files changed, 106 insertions(+), 115 deletions(-)
diff --git
a/kernel/logging/api/src/main/java/org/apache/shardingsphere/logging/spi/ShardingSphereLogBuilder.java
b/kernel/logging/api/src/main/java/org/apache/shardingsphere/logging/spi/ShardingSphereLogBuilder.java
new file mode 100644
index 00000000000..69665469fd3
--- /dev/null
+++
b/kernel/logging/api/src/main/java/org/apache/shardingsphere/logging/spi/ShardingSphereLogBuilder.java
@@ -0,0 +1,53 @@
+/*
+ * 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 org.apache.shardingsphere.logging.spi;
+
+import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPI;
+import org.apache.shardingsphere.logging.logger.ShardingSphereAppender;
+import org.apache.shardingsphere.logging.logger.ShardingSphereLogger;
+
+import java.util.Collection;
+
+/**
+ * ShardingSphere log builder.
+ *
+ * @param <T> type of logger context
+ */
+@SingletonSPI
+public interface ShardingSphereLogBuilder<T> extends TypedSPI {
+
+ /**
+ * Get default loggers.
+ *
+ * @param loggerContext logger context
+ * @return default loggers
+ */
+ Collection<ShardingSphereLogger> getDefaultLoggers(T loggerContext);
+
+ /**
+ * Get default appenders.
+ *
+ * @param loggerContext logger context
+ * @return default appenders
+ */
+ Collection<ShardingSphereAppender> getDefaultAppenders(T loggerContext);
+
+ @Override
+ Class<T> getType();
+}
diff --git a/kernel/logging/core/pom.xml b/kernel/logging/core/pom.xml
index 8f257b72147..cf371831736 100644
--- a/kernel/logging/core/pom.xml
+++ b/kernel/logging/core/pom.xml
@@ -44,11 +44,5 @@
<version>${project.version}</version>
<scope>test</scope>
</dependency>
-
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- <scope>compile</scope>
- </dependency>
</dependencies>
</project>
diff --git
a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/rule/builder/DefaultLoggingRuleConfigurationBuilder.java
b/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/rule/builder/DefaultLoggingRuleConfigurationBuilder.java
index 0b50b3382c5..aeefff50023 100644
---
a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/rule/builder/DefaultLoggingRuleConfigurationBuilder.java
+++
b/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/rule/builder/DefaultLoggingRuleConfigurationBuilder.java
@@ -17,76 +17,28 @@
package org.apache.shardingsphere.logging.rule.builder;
-import ch.qos.logback.classic.LoggerContext;
-import ch.qos.logback.core.Appender;
-import ch.qos.logback.core.FileAppender;
-import ch.qos.logback.core.OutputStreamAppender;
-import ch.qos.logback.core.encoder.LayoutWrappingEncoder;
-import ch.qos.logback.core.pattern.PatternLayoutBase;
import
org.apache.shardingsphere.infra.rule.builder.global.DefaultGlobalRuleConfigurationBuilder;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.logging.config.LoggingRuleConfiguration;
import org.apache.shardingsphere.logging.constant.LoggingOrder;
-import org.apache.shardingsphere.logging.logger.ShardingSphereAppender;
-import org.apache.shardingsphere.logging.logger.ShardingSphereLogger;
+import org.apache.shardingsphere.logging.spi.ShardingSphereLogBuilder;
import org.slf4j.ILoggerFactory;
-import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Collection;
import java.util.Collections;
-import java.util.Comparator;
-import java.util.Objects;
-import java.util.TreeSet;
-import java.util.stream.Collectors;
/**
* Default logging rule configuration builder.
*/
public final class DefaultLoggingRuleConfigurationBuilder implements
DefaultGlobalRuleConfigurationBuilder<LoggingRuleConfiguration,
LoggingRuleBuilder> {
+ @SuppressWarnings("unchecked")
@Override
public LoggingRuleConfiguration build() {
- ILoggerFactory iLoggerFactory = LoggerFactory.getILoggerFactory();
- if
("ch.qos.logback.classic.LoggerContext".equals(iLoggerFactory.getClass().getName()))
{
- LoggerContext loggerContext = (LoggerContext) iLoggerFactory;
- return new
LoggingRuleConfiguration(getDefaultLoggers(loggerContext),
getDefaultAppenders(loggerContext));
- }
- return new LoggingRuleConfiguration(Collections.emptyList(),
Collections.emptySet());
- }
-
- private Collection<ShardingSphereLogger> getDefaultLoggers(final
LoggerContext loggerContext) {
- return loggerContext.getLoggerList().stream().filter(each -> null !=
each.getLevel()).filter(each ->
!Logger.ROOT_LOGGER_NAME.equalsIgnoreCase(each.getName()))
- .map(each -> new ShardingSphereLogger(each.getName(),
each.getLevel().levelStr, each.isAdditive(),
- each.iteratorForAppenders().hasNext() ?
each.iteratorForAppenders().next().getName() : null))
- .collect(Collectors.toList());
- }
-
- private Collection<ShardingSphereAppender> getDefaultAppenders(final
LoggerContext loggerContext) {
- return loggerContext.getLoggerList().stream().filter(each -> null !=
each.getLevel()).filter(each ->
!Logger.ROOT_LOGGER_NAME.equalsIgnoreCase(each.getName())).map(each -> {
- if (each.iteratorForAppenders().hasNext()) {
- Appender<?> appender = each.iteratorForAppenders().next();
- ShardingSphereAppender shardingSphereAppender = new
ShardingSphereAppender(appender.getName(), appender.getClass().getName(),
getAppenderPattern(appender));
- getFileOutput(appender, shardingSphereAppender);
- return shardingSphereAppender;
- }
- return null;
- }).filter(Objects::nonNull).collect(Collectors.toCollection(() -> new
TreeSet<>(Comparator.comparing(ShardingSphereAppender::getAppenderName))));
- }
-
- private String getAppenderPattern(final Appender<?> appender) {
- if (appender instanceof OutputStreamAppender) {
- OutputStreamAppender<?> consoleAppender =
(OutputStreamAppender<?>) appender;
- LayoutWrappingEncoder<?> encoder = (LayoutWrappingEncoder<?>)
consoleAppender.getEncoder();
- PatternLayoutBase<?> layout = (PatternLayoutBase<?>)
encoder.getLayout();
- return layout.getPattern();
- }
- return "";
- }
-
- private void getFileOutput(final Appender<?> appender, final
ShardingSphereAppender shardingSphereAppender) {
- if (appender instanceof FileAppender) {
- shardingSphereAppender.setFile(((FileAppender<?>)
appender).getFile());
- }
+ ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory();
+ return TypedSPILoader.findService(ShardingSphereLogBuilder.class,
loggerFactory.getClass())
+ .map(optional -> new
LoggingRuleConfiguration(optional.getDefaultLoggers(loggerFactory),
optional.getDefaultAppenders(loggerFactory)))
+ .orElseGet(() -> new
LoggingRuleConfiguration(Collections.emptyList(), Collections.emptySet()));
}
@Override
diff --git
a/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/rule/builder/DefaultLoggingRuleConfigurationBuilderTest.java
b/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/rule/builder/DefaultLoggingRuleConfigurationBuilderTest.java
index 9f12825141e..0a59917d343 100644
---
a/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/rule/builder/DefaultLoggingRuleConfigurationBuilderTest.java
+++
b/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/rule/builder/DefaultLoggingRuleConfigurationBuilderTest.java
@@ -20,15 +20,14 @@ package org.apache.shardingsphere.logging.rule.builder;
import org.apache.shardingsphere.logging.config.LoggingRuleConfiguration;
import org.junit.jupiter.api.Test;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
class DefaultLoggingRuleConfigurationBuilderTest {
@Test
void assertBuild() {
LoggingRuleConfiguration actual = new
DefaultLoggingRuleConfigurationBuilder().build();
- assertThat(actual.getLoggers().size(), is(4));
- assertThat(actual.getAppenders().size(), is(1));
+ assertTrue(actual.getLoggers().isEmpty());
+ assertTrue(actual.getAppenders().isEmpty());
}
}
diff --git a/kernel/logging/pom.xml b/kernel/logging/pom.xml
index 4698a07c572..32674fd7bf6 100644
--- a/kernel/logging/pom.xml
+++ b/kernel/logging/pom.xml
@@ -30,5 +30,6 @@
<modules>
<module>api</module>
<module>core</module>
+ <module>type</module>
</modules>
</project>
diff --git a/kernel/logging/core/pom.xml b/kernel/logging/type/logback/pom.xml
similarity index 74%
copy from kernel/logging/core/pom.xml
copy to kernel/logging/type/logback/pom.xml
index 8f257b72147..e196578dbc9 100644
--- a/kernel/logging/core/pom.xml
+++ b/kernel/logging/type/logback/pom.xml
@@ -20,10 +20,10 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.shardingsphere</groupId>
- <artifactId>shardingsphere-logging</artifactId>
+ <artifactId>shardingsphere-logging-type</artifactId>
<version>5.5.1-SNAPSHOT</version>
</parent>
- <artifactId>shardingsphere-logging-core</artifactId>
+ <artifactId>shardingsphere-logging-type-logback</artifactId>
<name>${project.artifactId}</name>
<dependencies>
@@ -32,18 +32,6 @@
<artifactId>shardingsphere-logging-api</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>org.apache.shardingsphere</groupId>
- <artifactId>shardingsphere-mode-api</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.shardingsphere</groupId>
- <artifactId>shardingsphere-test-it-yaml</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
diff --git
a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/rule/builder/DefaultLoggingRuleConfigurationBuilder.java
b/kernel/logging/type/logback/src/main/java/org/apache/shardingsphere/logging/type/logback/ShardingSphereLogbackBuilder.java
similarity index 59%
copy from
kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/rule/builder/DefaultLoggingRuleConfigurationBuilder.java
copy to
kernel/logging/type/logback/src/main/java/org/apache/shardingsphere/logging/type/logback/ShardingSphereLogbackBuilder.java
index 0b50b3382c5..287b8749e7d 100644
---
a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/rule/builder/DefaultLoggingRuleConfigurationBuilder.java
+++
b/kernel/logging/type/logback/src/main/java/org/apache/shardingsphere/logging/type/logback/ShardingSphereLogbackBuilder.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.logging.rule.builder;
+package org.apache.shardingsphere.logging.type.logback;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.Appender;
@@ -23,51 +23,38 @@ import ch.qos.logback.core.FileAppender;
import ch.qos.logback.core.OutputStreamAppender;
import ch.qos.logback.core.encoder.LayoutWrappingEncoder;
import ch.qos.logback.core.pattern.PatternLayoutBase;
-import
org.apache.shardingsphere.infra.rule.builder.global.DefaultGlobalRuleConfigurationBuilder;
-import org.apache.shardingsphere.logging.config.LoggingRuleConfiguration;
-import org.apache.shardingsphere.logging.constant.LoggingOrder;
import org.apache.shardingsphere.logging.logger.ShardingSphereAppender;
import org.apache.shardingsphere.logging.logger.ShardingSphereLogger;
-import org.slf4j.ILoggerFactory;
+import org.apache.shardingsphere.logging.spi.ShardingSphereLogBuilder;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.util.Collection;
-import java.util.Collections;
import java.util.Comparator;
import java.util.Objects;
import java.util.TreeSet;
import java.util.stream.Collectors;
/**
- * Default logging rule configuration builder.
+ * ShardingSphere log builder for logback.
*/
-public final class DefaultLoggingRuleConfigurationBuilder implements
DefaultGlobalRuleConfigurationBuilder<LoggingRuleConfiguration,
LoggingRuleBuilder> {
+public final class ShardingSphereLogbackBuilder implements
ShardingSphereLogBuilder<LoggerContext> {
@Override
- public LoggingRuleConfiguration build() {
- ILoggerFactory iLoggerFactory = LoggerFactory.getILoggerFactory();
- if
("ch.qos.logback.classic.LoggerContext".equals(iLoggerFactory.getClass().getName()))
{
- LoggerContext loggerContext = (LoggerContext) iLoggerFactory;
- return new
LoggingRuleConfiguration(getDefaultLoggers(loggerContext),
getDefaultAppenders(loggerContext));
- }
- return new LoggingRuleConfiguration(Collections.emptyList(),
Collections.emptySet());
- }
-
- private Collection<ShardingSphereLogger> getDefaultLoggers(final
LoggerContext loggerContext) {
+ public Collection<ShardingSphereLogger> getDefaultLoggers(final
LoggerContext loggerContext) {
return loggerContext.getLoggerList().stream().filter(each -> null !=
each.getLevel()).filter(each ->
!Logger.ROOT_LOGGER_NAME.equalsIgnoreCase(each.getName()))
- .map(each -> new ShardingSphereLogger(each.getName(),
each.getLevel().levelStr, each.isAdditive(),
- each.iteratorForAppenders().hasNext() ?
each.iteratorForAppenders().next().getName() : null))
+ .map(each -> new ShardingSphereLogger(
+ each.getName(), each.getLevel().levelStr,
each.isAdditive(), each.iteratorForAppenders().hasNext() ?
each.iteratorForAppenders().next().getName() : null))
.collect(Collectors.toList());
}
- private Collection<ShardingSphereAppender> getDefaultAppenders(final
LoggerContext loggerContext) {
+ @Override
+ public Collection<ShardingSphereAppender> getDefaultAppenders(final
LoggerContext loggerContext) {
return loggerContext.getLoggerList().stream().filter(each -> null !=
each.getLevel()).filter(each ->
!Logger.ROOT_LOGGER_NAME.equalsIgnoreCase(each.getName())).map(each -> {
if (each.iteratorForAppenders().hasNext()) {
Appender<?> appender = each.iteratorForAppenders().next();
- ShardingSphereAppender shardingSphereAppender = new
ShardingSphereAppender(appender.getName(), appender.getClass().getName(),
getAppenderPattern(appender));
- getFileOutput(appender, shardingSphereAppender);
- return shardingSphereAppender;
+ ShardingSphereAppender result = new
ShardingSphereAppender(appender.getName(), appender.getClass().getName(),
getAppenderPattern(appender));
+ getFileOutput(appender, result);
+ return result;
}
return null;
}).filter(Objects::nonNull).collect(Collectors.toCollection(() -> new
TreeSet<>(Comparator.comparing(ShardingSphereAppender::getAppenderName))));
@@ -90,12 +77,7 @@ public final class DefaultLoggingRuleConfigurationBuilder
implements DefaultGlob
}
@Override
- public int getOrder() {
- return LoggingOrder.ORDER;
- }
-
- @Override
- public Class<LoggingRuleBuilder> getTypeClass() {
- return LoggingRuleBuilder.class;
+ public Class<LoggerContext> getType() {
+ return LoggerContext.class;
}
}
diff --git
a/kernel/logging/type/logback/src/main/resources/META-INF/services/org.apache.shardingsphere.logging.spi.ShardingSphereLogBuilder
b/kernel/logging/type/logback/src/main/resources/META-INF/services/org.apache.shardingsphere.logging.spi.ShardingSphereLogBuilder
new file mode 100644
index 00000000000..5a60e99f2ff
--- /dev/null
+++
b/kernel/logging/type/logback/src/main/resources/META-INF/services/org.apache.shardingsphere.logging.spi.ShardingSphereLogBuilder
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.logging.type.logback.ShardingSphereLogbackBuilder
diff --git a/kernel/logging/pom.xml b/kernel/logging/type/pom.xml
similarity index 88%
copy from kernel/logging/pom.xml
copy to kernel/logging/type/pom.xml
index 4698a07c572..c487b7b840f 100644
--- a/kernel/logging/pom.xml
+++ b/kernel/logging/type/pom.xml
@@ -20,15 +20,14 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.shardingsphere</groupId>
- <artifactId>shardingsphere-kernel</artifactId>
+ <artifactId>shardingsphere-logging</artifactId>
<version>5.5.1-SNAPSHOT</version>
</parent>
- <artifactId>shardingsphere-logging</artifactId>
+ <artifactId>shardingsphere-logging-type</artifactId>
<packaging>pom</packaging>
<name>${project.artifactId}</name>
<modules>
- <module>api</module>
- <module>core</module>
+ <module>logback</module>
</modules>
</project>
diff --git a/proxy/bootstrap/pom.xml b/proxy/bootstrap/pom.xml
index a5c909ca514..89e957e98e4 100644
--- a/proxy/bootstrap/pom.xml
+++ b/proxy/bootstrap/pom.xml
@@ -92,6 +92,11 @@
<artifactId>shardingsphere-cluster-mode-repository-etcd</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-logging-type-logback</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>