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>

Reply via email to