This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 7c6314cb9f0 optimize agent log (#23846)
7c6314cb9f0 is described below
commit 7c6314cb9f008f5e2decebd88cad2747e2c1c3d7
Author: jiangML <[email protected]>
AuthorDate: Tue Jan 31 15:02:26 2023 +0800
optimize agent log (#23846)
* add log-api and log-to-slf4j
* optimize code
* optimize package name
* add license
* add license for pom
* add NOPAgentLogger and optimize AgentLoggerFactory
* optimize PluginLifecycleServiceManager
* fix error about classloader
* rename IAgentLoggerFactory to AgentLoggerFactorySPI
* optimize SLF4JAgentLoggerFactory
---
agent/core/pom.xml | 11 ++
.../advisor/config/AdvisorConfigurationLoader.java | 4 +-
.../executor/type/ConstructorAdviceExecutor.java | 4 +-
.../type/InstanceMethodAdviceExecutor.java | 4 +-
.../executor/type/StaticMethodAdviceExecutor.java | 4 +-
.../agent/core/builder/AgentLoggingListener.java | 4 +-
.../impl/MethodAdvisorBuilderInterceptor.java | 10 +-
.../agent/core/log/AgentLoggerClassLoader.java | 2 +-
.../AgentLoggerClassLoaderFactory.java} | 49 +++---
.../agent/core/log/AgentLoggerFactory.java | 172 ++++-----------------
.../core/plugin/PluginLifecycleServiceManager.java | 20 +--
.../agent/core/plugin/jar/PluginJarLoader.java | 4 +-
.../agent/core/spi/AgentServiceLoader.java | 23 ++-
agent/log/log-api/pom.xml | 47 ++++++
.../shardingsphere/agent/log/api/AgentLogger.java | 69 +++++++++
.../agent/log/api/impl/NOPAgentLogger.java} | 43 ++++--
.../agent/log/spi/AgentLoggerFactorySPI.java} | 33 ++--
agent/log/log-to-slf4j/pom.xml | 44 ++++++
.../agent/log/slf4j/SLF4JAgentLogger.java | 61 ++++++++
.../agent/log/slf4j/SLF4JAgentLoggerFactory.java} | 28 ++--
...rdingsphere.agent.log.spi.AgentLoggerFactorySPI | 18 +++
agent/log/pom.xml | 35 +++++
agent/pom.xml | 1 +
distribution/agent/pom.xml | 5 +
.../shardingsphere-agent-binary-distribution.xml | 1 +
25 files changed, 458 insertions(+), 238 deletions(-)
diff --git a/agent/core/pom.xml b/agent/core/pom.xml
index 47bcdad9a4e..f21c35c4f88 100644
--- a/agent/core/pom.xml
+++ b/agent/core/pom.xml
@@ -37,6 +37,11 @@
<artifactId>shardingsphere-agent-api</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-agent-log-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
@@ -62,6 +67,12 @@
<artifactId>jul-to-slf4j</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-agent-log-to-slf4j</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/config/AdvisorConfigurationLoader.java
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/config/AdvisorConfigurationLoader.java
index fc06dc8fd8f..125fb5eb7ca 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/config/AdvisorConfigurationLoader.java
+++
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/config/AdvisorConfigurationLoader.java
@@ -22,9 +22,9 @@ import lombok.NoArgsConstructor;
import
org.apache.shardingsphere.agent.core.advisor.config.yaml.loader.YamlAdvisorsConfigurationLoader;
import
org.apache.shardingsphere.agent.core.advisor.config.yaml.swapper.YamlAdvisorsConfigurationSwapper;
import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory;
-import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory.Logger;
import
org.apache.shardingsphere.agent.core.plugin.classloader.AgentPluginClassLoader;
import org.apache.shardingsphere.agent.core.plugin.jar.PluginJarLoader;
+import org.apache.shardingsphere.agent.log.api.AgentLogger;
import java.io.InputStream;
import java.util.Collection;
@@ -38,7 +38,7 @@ import java.util.jar.JarFile;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class AdvisorConfigurationLoader {
- private static final Logger LOGGER =
AgentLoggerFactory.getLogger(PluginJarLoader.class);
+ private static final AgentLogger LOGGER =
AgentLoggerFactory.getAgentLogger(PluginJarLoader.class);
/**
* Load advisor configurations.
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/executor/type/ConstructorAdviceExecutor.java
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/executor/type/ConstructorAdviceExecutor.java
index 9015f4e25ac..f25eaf0e2ca 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/executor/type/ConstructorAdviceExecutor.java
+++
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/executor/type/ConstructorAdviceExecutor.java
@@ -30,8 +30,8 @@ import
org.apache.shardingsphere.agent.api.advice.TargetAdviceObject;
import org.apache.shardingsphere.agent.api.advice.type.ConstructorAdvice;
import org.apache.shardingsphere.agent.core.advisor.executor.AdviceExecutor;
import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory;
-import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory.Logger;
import org.apache.shardingsphere.agent.core.plugin.PluginContext;
+import org.apache.shardingsphere.agent.log.api.AgentLogger;
import java.util.Collection;
import java.util.Map;
@@ -43,7 +43,7 @@ import java.util.Map.Entry;
@RequiredArgsConstructor
public final class ConstructorAdviceExecutor implements AdviceExecutor {
- private static final Logger LOGGER =
AgentLoggerFactory.getLogger(ConstructorAdviceExecutor.class);
+ private static final AgentLogger LOGGER =
AgentLoggerFactory.getAgentLogger(ConstructorAdviceExecutor.class);
private final Map<String, Collection<ConstructorAdvice>> advices;
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/executor/type/InstanceMethodAdviceExecutor.java
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/executor/type/InstanceMethodAdviceExecutor.java
index 4426967f000..20a793af70a 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/executor/type/InstanceMethodAdviceExecutor.java
+++
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/executor/type/InstanceMethodAdviceExecutor.java
@@ -32,8 +32,8 @@ import
org.apache.shardingsphere.agent.api.advice.TargetAdviceObject;
import org.apache.shardingsphere.agent.api.advice.type.InstanceMethodAdvice;
import org.apache.shardingsphere.agent.core.advisor.executor.AdviceExecutor;
import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory;
-import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory.Logger;
import org.apache.shardingsphere.agent.core.plugin.PluginContext;
+import org.apache.shardingsphere.agent.log.api.AgentLogger;
import java.lang.reflect.Method;
import java.util.Collection;
@@ -47,7 +47,7 @@ import java.util.concurrent.Callable;
@RequiredArgsConstructor
public final class InstanceMethodAdviceExecutor implements AdviceExecutor {
- private static final Logger LOGGER =
AgentLoggerFactory.getLogger(InstanceMethodAdviceExecutor.class);
+ private static final AgentLogger LOGGER =
AgentLoggerFactory.getAgentLogger(InstanceMethodAdviceExecutor.class);
private final Map<String, Collection<InstanceMethodAdvice>> advices;
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/executor/type/StaticMethodAdviceExecutor.java
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/executor/type/StaticMethodAdviceExecutor.java
index 53b543abae4..a802a88ca02 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/executor/type/StaticMethodAdviceExecutor.java
+++
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/executor/type/StaticMethodAdviceExecutor.java
@@ -30,8 +30,8 @@ import net.bytebuddy.matcher.ElementMatchers;
import org.apache.shardingsphere.agent.api.advice.type.StaticMethodAdvice;
import org.apache.shardingsphere.agent.core.advisor.executor.AdviceExecutor;
import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory;
-import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory.Logger;
import org.apache.shardingsphere.agent.core.plugin.PluginContext;
+import org.apache.shardingsphere.agent.log.api.AgentLogger;
import java.lang.reflect.Method;
import java.util.Collection;
@@ -45,7 +45,7 @@ import java.util.concurrent.Callable;
@RequiredArgsConstructor
public final class StaticMethodAdviceExecutor implements AdviceExecutor {
- private static final Logger LOGGER =
AgentLoggerFactory.getLogger(StaticMethodAdviceExecutor.class);
+ private static final AgentLogger LOGGER =
AgentLoggerFactory.getAgentLogger(StaticMethodAdviceExecutor.class);
private final Map<String, Collection<StaticMethodAdvice>> advices;
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/AgentLoggingListener.java
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/AgentLoggingListener.java
index 634a6430c1b..270eb28f6f4 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/AgentLoggingListener.java
+++
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/AgentLoggingListener.java
@@ -22,7 +22,7 @@ import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.utility.JavaModule;
import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory;
-import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory.Logger;
+import org.apache.shardingsphere.agent.log.api.AgentLogger;
/**
* Agent logging listener.
@@ -30,7 +30,7 @@ import
org.apache.shardingsphere.agent.core.log.AgentLoggerFactory.Logger;
@SuppressWarnings("NullableProblems")
public final class AgentLoggingListener implements Listener {
- private static final Logger LOGGER =
AgentLoggerFactory.getLogger(AgentLoggingListener.class);
+ private static final AgentLogger LOGGER =
AgentLoggerFactory.getAgentLogger(AgentLoggingListener.class);
@Override
public void onDiscovery(final String typeName, final ClassLoader
classLoader, final JavaModule module, final boolean loaded) {
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/impl/MethodAdvisorBuilderInterceptor.java
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/impl/MethodAdvisorBuilderInterceptor.java
index d7d78f8e0f0..ab8d82f6fc8 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/impl/MethodAdvisorBuilderInterceptor.java
+++
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/impl/MethodAdvisorBuilderInterceptor.java
@@ -20,13 +20,13 @@ package
org.apache.shardingsphere.agent.core.builder.interceptor.impl;
import net.bytebuddy.description.method.MethodDescription.InDefinedShape;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType.Builder;
-import
org.apache.shardingsphere.agent.core.builder.interceptor.AgentBuilderInterceptor;
-import org.apache.shardingsphere.agent.core.classloader.ClassLoaderContext;
-import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory;
-import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory.Logger;
import
org.apache.shardingsphere.agent.core.advisor.config.AdvisorConfiguration;
import org.apache.shardingsphere.agent.core.advisor.executor.AdviceExecutor;
import
org.apache.shardingsphere.agent.core.advisor.executor.AdviceExecutorFactory;
+import
org.apache.shardingsphere.agent.core.builder.interceptor.AgentBuilderInterceptor;
+import org.apache.shardingsphere.agent.core.classloader.ClassLoaderContext;
+import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory;
+import org.apache.shardingsphere.agent.log.api.AgentLogger;
import java.util.Optional;
@@ -35,7 +35,7 @@ import java.util.Optional;
*/
public final class MethodAdvisorBuilderInterceptor implements
AgentBuilderInterceptor {
- private static final Logger LOGGER =
AgentLoggerFactory.getLogger(MethodAdvisorBuilderInterceptor.class);
+ private static final AgentLogger LOGGER =
AgentLoggerFactory.getAgentLogger(MethodAdvisorBuilderInterceptor.class);
private final TypeDescription typePointcut;
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoader.java
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoader.java
index 010a49e8a93..b7c45746254 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoader.java
+++
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoader.java
@@ -30,7 +30,7 @@ import java.util.jar.JarFile;
public final class AgentLoggerClassLoader extends AgentExtraClassLoader {
public AgentLoggerClassLoader(final Collection<JarFile> loggingJars, final
File resourcePath) {
- super(AgentLoggerFactory.class.getClassLoader().getParent(),
loggingJars, Collections.singleton(resourcePath));
+ super(AgentLoggerFactory.class.getClassLoader(), loggingJars,
Collections.singleton(resourcePath));
}
public AgentLoggerClassLoader() {
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/jar/PluginJarLoader.java
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoaderFactory.java
similarity index 57%
copy from
agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/jar/PluginJarLoader.java
copy to
agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoaderFactory.java
index 3b3e45538c3..65d6f28b059 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/jar/PluginJarLoader.java
+++
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoaderFactory.java
@@ -15,16 +15,16 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.plugin.jar;
+package org.apache.shardingsphere.agent.core.log;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
-import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory;
-import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory.Logger;
+import org.apache.shardingsphere.agent.core.path.AgentPath;
import java.io.File;
import java.io.IOException;
+import java.net.URISyntaxException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -35,43 +35,44 @@ import java.util.LinkedList;
import java.util.jar.JarFile;
/**
- * Plugin jar loader.
+ * Agent logger class loader factory.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class PluginJarLoader {
-
- private static final Logger LOGGER =
AgentLoggerFactory.getLogger(PluginJarLoader.class);
+public final class AgentLoggerClassLoaderFactory {
/**
- * Load plugin jars.
- *
- * @param agentRootPath agent root path
- * @return plugin jars
- * @throws IOException IO exception
+ * Create agent logger class loader.
+ *
+ * @return agent logger class loader
*/
- public static Collection<JarFile> load(final File agentRootPath) throws
IOException {
- Collection<File> jarFiles = getJarFiles(new
File(String.join(File.separator, agentRootPath.getPath(), "plugins")));
- Collection<JarFile> result = new LinkedList<>();
- for (File each : jarFiles) {
- result.add(new JarFile(each, true));
- LOGGER.info("Loaded jar: {}", each.getName());
- }
- return result;
+ @SneakyThrows(URISyntaxException.class)
+ public static AgentLoggerClassLoader create() {
+ File agentFle = new
File(AgentLoggerFactory.class.getProtectionDomain().getCodeSource().getLocation().toURI());
+ return agentFle.isFile() && agentFle.getName().endsWith(".jar") ? new
AgentLoggerClassLoader(getLoggingJars(), getLoggingResourcePath()) : new
AgentLoggerClassLoader();
}
@SneakyThrows(IOException.class)
- private static Collection<File> getJarFiles(final File file) {
- Collection<File> result = new LinkedList<>();
- Files.walkFileTree(file.toPath(), new SimpleFileVisitor<Path>() {
+ private static Collection<JarFile> getLoggingJars() {
+ Collection<JarFile> result = new LinkedList<>();
+ Files.walkFileTree(new File(String.join(File.separator,
AgentPath.getRootPath().getPath(), "lib")).toPath(), new
SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(final Path path, final
BasicFileAttributes attributes) {
if (path.toFile().isFile() &&
path.toFile().getName().endsWith(".jar")) {
- result.add(path.toFile());
+ result.add(getJarFile(path));
}
return FileVisitResult.CONTINUE;
}
});
return result;
}
+
+ @SneakyThrows(IOException.class)
+ private static JarFile getJarFile(final Path path) {
+ return new JarFile(path.toFile(), true);
+ }
+
+ private static File getLoggingResourcePath() {
+ return new File(String.join(File.separator,
AgentPath.getRootPath().getPath(), "conf"));
+ }
}
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerFactory.java
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerFactory.java
index c2327a22f37..ebb41a965d4 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerFactory.java
+++
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerFactory.java
@@ -17,163 +17,53 @@
package org.apache.shardingsphere.agent.core.log;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-import org.apache.shardingsphere.agent.core.path.AgentPath;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.agent.core.spi.AgentServiceLoader;
+import org.apache.shardingsphere.agent.log.api.AgentLogger;
+import org.apache.shardingsphere.agent.log.api.impl.NOPAgentLogger;
+import org.apache.shardingsphere.agent.log.spi.AgentLoggerFactorySPI;
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.net.URISyntaxException;
-import java.nio.file.FileVisitResult;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.SimpleFileVisitor;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.jar.JarFile;
+import java.util.Optional;
/**
* Agent logger factory.
*/
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class AgentLoggerFactory {
- private static AgentLoggerClassLoader classLoader;
+ private static AgentLoggerClassLoader agentLoggerClassLoader;
/**
- * Get logger.
- *
- * @param clazz class
- * @return logger
+ * Get agent logger.
+ *
+ * @param clazz clazz
+ * @return agent logger
*/
- @SneakyThrows(ReflectiveOperationException.class)
- public static Logger getLogger(final Class<?> clazz) {
- Class<?> factoryClazz =
getClassLoader().loadClass("org.slf4j.LoggerFactory");
- Method method = factoryClazz.getMethod("getLogger", Class.class);
- return new Logger(method.invoke(null, clazz));
+ public static AgentLogger getAgentLogger(final Class<?> clazz) {
+ return AgentLoggerFactory.getAgentLogger(clazz.getName());
}
- private static AgentLoggerClassLoader getClassLoader() {
- if (null != classLoader) {
- return classLoader;
- }
- synchronized (AgentLoggerFactory.class) {
- if (null == classLoader) {
- classLoader = getAgentLoggerClassLoader();
- }
- }
- return classLoader;
+ /**
+ * Get agent logger.
+ *
+ * @param name name
+ * @return agent logger
+ */
+ public static AgentLogger getAgentLogger(final String name) {
+ Optional<AgentLoggerFactorySPI> loggerFactory =
AgentServiceLoader.getServiceLoader(getAgentLoggerClassLoader(),
AgentLoggerFactorySPI.class).getServices().stream().findFirst();
+ return loggerFactory.isPresent() ?
loggerFactory.get().getAgentLogger(name) : new NOPAgentLogger();
}
- @SneakyThrows(URISyntaxException.class)
private static AgentLoggerClassLoader getAgentLoggerClassLoader() {
- File agentFle = new
File(AgentLoggerFactory.class.getProtectionDomain().getCodeSource().getLocation().toURI());
- return agentFle.isFile() && agentFle.getName().endsWith(".jar") ? new
AgentLoggerClassLoader(getLoggingJars(), getLoggingResourcePath()) : new
AgentLoggerClassLoader();
- }
-
- @SneakyThrows(IOException.class)
- private static Collection<JarFile> getLoggingJars() {
- Collection<JarFile> result = new LinkedList<>();
- Files.walkFileTree(new File(String.join(File.separator,
AgentPath.getRootPath().getPath(), "lib")).toPath(), new
SimpleFileVisitor<Path>() {
-
- @Override
- public FileVisitResult visitFile(final Path path, final
BasicFileAttributes attributes) {
- if (path.toFile().isFile() &&
path.toFile().getName().endsWith(".jar")) {
- result.add(getJarFile(path));
- }
- return FileVisitResult.CONTINUE;
- }
- });
- return result;
- }
-
- @SneakyThrows(IOException.class)
- private static JarFile getJarFile(final Path path) {
- return new JarFile(path.toFile(), true);
- }
-
- private static File getLoggingResourcePath() {
- return new File(String.join(File.separator,
AgentPath.getRootPath().getPath(), "conf"));
- }
-
- /**
- * Logger.
- */
- @RequiredArgsConstructor
- public static final class Logger {
-
- private final Object logger;
-
- /**
- * Info.
- *
- * @param msg message
- */
- public void info(final String msg) {
- invokeMethod("info", msg);
- }
-
- /**
- * Info.
- *
- * @param format format
- * @param arguments arguments
- */
- public void info(final String format, final Object... arguments) {
- invokeMethod("info", format, arguments);
- }
-
- /**
- * Debug.
- *
- * @param format format
- * @param arguments arguments
- */
- public void debug(final String format, final Object... arguments) {
- invokeMethod("debug", format, arguments);
+ if (null != agentLoggerClassLoader) {
+ return agentLoggerClassLoader;
}
-
- /**
- * Debug.
- *
- * @param msg message
- */
- public void debug(final String msg) {
- invokeMethod("debug", msg);
- }
-
- /**
- * Error.
- *
- * @param format format
- * @param arguments arguments
- */
- public void error(final String format, final Object... arguments) {
- invokeMethod("error", format, arguments);
- }
-
- /**
- * Error.
- *
- * @param msg message
- */
- public void error(final String msg) {
- invokeMethod("error", msg);
- }
-
- @SneakyThrows(ReflectiveOperationException.class)
- private void invokeMethod(final String methodName, final String msg) {
- Class<?> actualLogger =
AgentLoggerFactory.getClassLoader().loadClass("org.slf4j.Logger");
- Method method = actualLogger.getMethod(methodName, String.class);
- method.invoke(logger, msg);
- }
-
- @SneakyThrows(ReflectiveOperationException.class)
- private void invokeMethod(final String methodName, final String msg,
final Object... arguments) {
- Class<?> actualLogger =
AgentLoggerFactory.getClassLoader().loadClass("org.slf4j.Logger");
- Method method = actualLogger.getMethod(methodName, String.class,
Object[].class);
- method.invoke(logger, msg, arguments);
+ synchronized (AgentLoggerFactory.class) {
+ if (null == agentLoggerClassLoader) {
+ agentLoggerClassLoader =
AgentLoggerClassLoaderFactory.create();
+ }
}
+ return agentLoggerClassLoader;
}
}
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginLifecycleServiceManager.java
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginLifecycleServiceManager.java
index 2c773405a8a..be3ec3ba020 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginLifecycleServiceManager.java
+++
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginLifecycleServiceManager.java
@@ -21,8 +21,8 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.agent.api.PluginConfiguration;
import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory;
-import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory.Logger;
import org.apache.shardingsphere.agent.core.spi.AgentServiceLoader;
+import org.apache.shardingsphere.agent.log.api.AgentLogger;
import org.apache.shardingsphere.agent.spi.PluginLifecycleService;
import java.io.IOException;
@@ -40,27 +40,27 @@ public final class PluginLifecycleServiceManager {
private static final AtomicBoolean STARTED_FLAG = new AtomicBoolean(false);
- private static final Logger LOGGER =
AgentLoggerFactory.getLogger(PluginLifecycleServiceManager.class);
+ private static final AgentLogger LOGGER =
AgentLoggerFactory.getAgentLogger(PluginLifecycleServiceManager.class);
/**
* Initialize all plugins.
*
* @param pluginConfigs plugin configuration map
* @param pluginJars plugin jars
- * @param agentClassLoader agent class loader
+ * @param pluginClassLoader plugin class loader
* @param isEnhancedForProxy is enhanced for proxy
*/
- public static void init(final Map<String, PluginConfiguration>
pluginConfigs, final Collection<JarFile> pluginJars, final ClassLoader
agentClassLoader, final boolean isEnhancedForProxy) {
+ public static void init(final Map<String, PluginConfiguration>
pluginConfigs, final Collection<JarFile> pluginJars, final ClassLoader
pluginClassLoader, final boolean isEnhancedForProxy) {
if (STARTED_FLAG.compareAndSet(false, true)) {
- PluginLifecycleServiceManager.start(pluginConfigs,
agentClassLoader, isEnhancedForProxy);
- Runtime.getRuntime().addShutdownHook(new Thread(() ->
PluginLifecycleServiceManager.close(pluginJars)));
+ PluginLifecycleServiceManager.start(pluginConfigs,
pluginClassLoader, isEnhancedForProxy);
+ Runtime.getRuntime().addShutdownHook(new Thread(() ->
PluginLifecycleServiceManager.close(pluginClassLoader, pluginJars)));
}
}
- private static void start(final Map<String, PluginConfiguration>
pluginConfigs, final ClassLoader agentClassLoader, final boolean
isEnhancedForProxy) {
+ private static void start(final Map<String, PluginConfiguration>
pluginConfigs, final ClassLoader pluginClassLoader, final boolean
isEnhancedForProxy) {
ClassLoader originalClassLoader =
Thread.currentThread().getContextClassLoader();
try {
- Thread.currentThread().setContextClassLoader(agentClassLoader);
+ Thread.currentThread().setContextClassLoader(pluginClassLoader);
for (Entry<String, PluginConfiguration> entry :
pluginConfigs.entrySet()) {
AgentServiceLoader.getServiceLoader(PluginLifecycleService.class).getServices()
.stream().filter(each ->
each.getType().equalsIgnoreCase(entry.getKey())).findFirst().ifPresent(optional
-> start(entry.getValue(), optional, isEnhancedForProxy));
@@ -81,8 +81,8 @@ public final class PluginLifecycleServiceManager {
}
}
- private static void close(final Collection<JarFile> pluginJars) {
-
AgentServiceLoader.getServiceLoader(PluginLifecycleService.class).getServices().forEach(each
-> {
+ private static void close(final ClassLoader pluginClassLoader, final
Collection<JarFile> pluginJars) {
+ AgentServiceLoader.getServiceLoader(pluginClassLoader,
PluginLifecycleService.class).getServices().forEach(each -> {
try {
each.close();
// CHECKSTYLE:OFF
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/jar/PluginJarLoader.java
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/jar/PluginJarLoader.java
index 3b3e45538c3..b890cd7ed64 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/jar/PluginJarLoader.java
+++
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/jar/PluginJarLoader.java
@@ -21,7 +21,7 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory;
-import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory.Logger;
+import org.apache.shardingsphere.agent.log.api.AgentLogger;
import java.io.File;
import java.io.IOException;
@@ -40,7 +40,7 @@ import java.util.jar.JarFile;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class PluginJarLoader {
- private static final Logger LOGGER =
AgentLoggerFactory.getLogger(PluginJarLoader.class);
+ private static final AgentLogger LOGGER =
AgentLoggerFactory.getAgentLogger(PluginJarLoader.class);
/**
* Load plugin jars.
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
index 6d028090d27..4d1b6885f82 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
+++
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
@@ -36,9 +36,9 @@ public final class AgentServiceLoader<T> {
private final Collection<T> services;
- private AgentServiceLoader(final Class<T> service) {
+ private AgentServiceLoader(final ClassLoader classLoader, final Class<T>
service) {
validate(service);
- this.services = load(service);
+ this.services = load(classLoader, service);
}
private void validate(final Class<T> service) {
@@ -46,9 +46,9 @@ public final class AgentServiceLoader<T> {
Preconditions.checkArgument(service.isInterface(), "SPI class `%s` is
not interface.", service);
}
- private Collection<T> load(final Class<T> service) {
+ private Collection<T> load(final ClassLoader classLoader, final Class<T>
service) {
Collection<T> result = new LinkedList<>();
- for (T each : ServiceLoader.load(service)) {
+ for (T each : ServiceLoader.load(service, classLoader)) {
result.add(each);
}
return result;
@@ -63,6 +63,19 @@ public final class AgentServiceLoader<T> {
*/
@SuppressWarnings("unchecked")
public static <T> AgentServiceLoader<T> getServiceLoader(final Class<T>
service) {
- return (AgentServiceLoader<T>) LOADERS.computeIfAbsent(service,
AgentServiceLoader::new);
+ return
AgentServiceLoader.getServiceLoader(Thread.currentThread().getContextClassLoader(),
service);
+ }
+
+ /**
+ * Get singleton agent service loader.
+ *
+ * @param classLoader class loader
+ * @param service service type
+ * @param <T> type of class
+ * @return agent service loader
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> AgentServiceLoader<T> getServiceLoader(final ClassLoader
classLoader, final Class<T> service) {
+ return (AgentServiceLoader<T>) LOADERS.computeIfAbsent(service, key ->
new AgentServiceLoader<>(classLoader, service));
}
}
diff --git a/agent/log/log-api/pom.xml b/agent/log/log-api/pom.xml
new file mode 100644
index 00000000000..3abbb90be9a
--- /dev/null
+++ b/agent/log/log-api/pom.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-agent-log</artifactId>
+ <version>5.3.2-SNAPSHOT</version>
+ </parent>
+ <artifactId>shardingsphere-agent-log-api</artifactId>
+ <name>${project.artifactId}</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jul-to-slf4j</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git
a/agent/log/log-api/src/main/java/org/apache/shardingsphere/agent/log/api/AgentLogger.java
b/agent/log/log-api/src/main/java/org/apache/shardingsphere/agent/log/api/AgentLogger.java
new file mode 100644
index 00000000000..904ea6f5eb4
--- /dev/null
+++
b/agent/log/log-api/src/main/java/org/apache/shardingsphere/agent/log/api/AgentLogger.java
@@ -0,0 +1,69 @@
+/*
+ * 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.agent.log.api;
+
+/**
+ * Agent logger.
+ */
+public interface AgentLogger {
+
+ /**
+ * Info.
+ *
+ * @param msg message
+ */
+ void info(String msg);
+
+ /**
+ * Info.
+ *
+ * @param format format
+ * @param arguments arguments
+ */
+ void info(String format, Object... arguments);
+
+ /**
+ * Error.
+ *
+ * @param format format
+ * @param arguments arguments
+ */
+ void error(String format, Object... arguments);
+
+ /**
+ * Error.
+ *
+ * @param msg message
+ */
+ void error(String msg);
+
+ /**
+ * Debug.
+ *
+ * @param format format
+ * @param arguments arguments
+ */
+ void debug(String format, Object... arguments);
+
+ /**
+ * Debug.
+ *
+ * @param msg message
+ */
+ void debug(String msg);
+}
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoader.java
b/agent/log/log-api/src/main/java/org/apache/shardingsphere/agent/log/api/impl/NOPAgentLogger.java
similarity index 53%
copy from
agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoader.java
copy to
agent/log/log-api/src/main/java/org/apache/shardingsphere/agent/log/api/impl/NOPAgentLogger.java
index 010a49e8a93..4c31c5b578c 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoader.java
+++
b/agent/log/log-api/src/main/java/org/apache/shardingsphere/agent/log/api/impl/NOPAgentLogger.java
@@ -15,25 +15,42 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.log;
+package org.apache.shardingsphere.agent.log.api.impl;
-import org.apache.shardingsphere.agent.core.classloader.AgentExtraClassLoader;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.jar.JarFile;
+import org.apache.shardingsphere.agent.log.api.AgentLogger;
/**
- * Agent logger class loader.
+ * NOP (no operation) agent logger.
*/
-public final class AgentLoggerClassLoader extends AgentExtraClassLoader {
+public final class NOPAgentLogger implements AgentLogger {
+
+ @Override
+ public void info(final String msg) {
+
+ }
+
+ @Override
+ public void info(final String format, final Object... arguments) {
+
+ }
+
+ @Override
+ public void error(final String format, final Object... arguments) {
+
+ }
+
+ @Override
+ public void error(final String msg) {
+
+ }
- public AgentLoggerClassLoader(final Collection<JarFile> loggingJars, final
File resourcePath) {
- super(AgentLoggerFactory.class.getClassLoader().getParent(),
loggingJars, Collections.singleton(resourcePath));
+ @Override
+ public void debug(final String format, final Object... arguments) {
+
}
- public AgentLoggerClassLoader() {
- super(AgentLoggerFactory.class.getClassLoader(),
Collections.emptyList());
+ @Override
+ public void debug(final String msg) {
+
}
}
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoader.java
b/agent/log/log-api/src/main/java/org/apache/shardingsphere/agent/log/spi/AgentLoggerFactorySPI.java
similarity index 54%
copy from
agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoader.java
copy to
agent/log/log-api/src/main/java/org/apache/shardingsphere/agent/log/spi/AgentLoggerFactorySPI.java
index 010a49e8a93..b82a3632fca 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoader.java
+++
b/agent/log/log-api/src/main/java/org/apache/shardingsphere/agent/log/spi/AgentLoggerFactorySPI.java
@@ -15,25 +15,28 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.log;
+package org.apache.shardingsphere.agent.log.spi;
-import org.apache.shardingsphere.agent.core.classloader.AgentExtraClassLoader;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.jar.JarFile;
+import org.apache.shardingsphere.agent.log.api.AgentLogger;
/**
- * Agent logger class loader.
+ * Agent logger factory.
*/
-public final class AgentLoggerClassLoader extends AgentExtraClassLoader {
+public interface AgentLoggerFactorySPI {
- public AgentLoggerClassLoader(final Collection<JarFile> loggingJars, final
File resourcePath) {
- super(AgentLoggerFactory.class.getClassLoader().getParent(),
loggingJars, Collections.singleton(resourcePath));
- }
+ /**
+ * Get agent logger.
+ *
+ * @param clazz clazz
+ * @return agent logger
+ */
+ AgentLogger getAgentLogger(Class<?> clazz);
- public AgentLoggerClassLoader() {
- super(AgentLoggerFactory.class.getClassLoader(),
Collections.emptyList());
- }
+ /**
+ * Get agent logger.
+ *
+ * @param name name
+ * @return agent logger
+ */
+ AgentLogger getAgentLogger(String name);
}
diff --git a/agent/log/log-to-slf4j/pom.xml b/agent/log/log-to-slf4j/pom.xml
new file mode 100644
index 00000000000..6381ff31a10
--- /dev/null
+++ b/agent/log/log-to-slf4j/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-agent-log</artifactId>
+ <version>5.3.2-SNAPSHOT</version>
+ </parent>
+ <artifactId>shardingsphere-agent-log-to-slf4j</artifactId>
+ <name>${project.artifactId}</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-agent-log-api</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git
a/agent/log/log-to-slf4j/src/main/java/org/apache/shardingsphere/agent/log/slf4j/SLF4JAgentLogger.java
b/agent/log/log-to-slf4j/src/main/java/org/apache/shardingsphere/agent/log/slf4j/SLF4JAgentLogger.java
new file mode 100644
index 00000000000..dff68335005
--- /dev/null
+++
b/agent/log/log-to-slf4j/src/main/java/org/apache/shardingsphere/agent/log/slf4j/SLF4JAgentLogger.java
@@ -0,0 +1,61 @@
+/*
+ * 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.agent.log.slf4j;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.agent.log.api.AgentLogger;
+import org.slf4j.Logger;
+
+/**
+ * SLF4J agent logger.
+ */
+@RequiredArgsConstructor
+public final class SLF4JAgentLogger implements AgentLogger {
+
+ private final Logger logger;
+
+ @Override
+ public void info(final String msg) {
+ logger.info(msg);
+ }
+
+ @Override
+ public void info(final String format, final Object... arguments) {
+ logger.info(format, arguments);
+ }
+
+ @Override
+ public void error(final String format, final Object... arguments) {
+ logger.error(format, arguments);
+ }
+
+ @Override
+ public void error(final String msg) {
+ logger.error(msg);
+ }
+
+ @Override
+ public void debug(final String format, final Object... arguments) {
+ logger.debug(format, arguments);
+ }
+
+ @Override
+ public void debug(final String msg) {
+ logger.debug(msg);
+ }
+}
diff --git
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoader.java
b/agent/log/log-to-slf4j/src/main/java/org/apache/shardingsphere/agent/log/slf4j/SLF4JAgentLoggerFactory.java
similarity index 51%
copy from
agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoader.java
copy to
agent/log/log-to-slf4j/src/main/java/org/apache/shardingsphere/agent/log/slf4j/SLF4JAgentLoggerFactory.java
index 010a49e8a93..d7c6502c7db 100644
---
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/log/AgentLoggerClassLoader.java
+++
b/agent/log/log-to-slf4j/src/main/java/org/apache/shardingsphere/agent/log/slf4j/SLF4JAgentLoggerFactory.java
@@ -15,25 +15,29 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.log;
+package org.apache.shardingsphere.agent.log.slf4j;
-import org.apache.shardingsphere.agent.core.classloader.AgentExtraClassLoader;
+import org.apache.shardingsphere.agent.log.api.AgentLogger;
+import org.apache.shardingsphere.agent.log.spi.AgentLoggerFactorySPI;
+import org.slf4j.LoggerFactory;
-import java.io.File;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.jar.JarFile;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
/**
- * Agent logger class loader.
+ * SLF4J agent logger factory.
*/
-public final class AgentLoggerClassLoader extends AgentExtraClassLoader {
+public final class SLF4JAgentLoggerFactory implements AgentLoggerFactorySPI {
- public AgentLoggerClassLoader(final Collection<JarFile> loggingJars, final
File resourcePath) {
- super(AgentLoggerFactory.class.getClassLoader().getParent(),
loggingJars, Collections.singleton(resourcePath));
+ private static final Map<String, AgentLogger> LOGGER_MAP = new
ConcurrentHashMap<>();
+
+ @Override
+ public AgentLogger getAgentLogger(final Class<?> clazz) {
+ return getAgentLogger(clazz.getName());
}
- public AgentLoggerClassLoader() {
- super(AgentLoggerFactory.class.getClassLoader(),
Collections.emptyList());
+ @Override
+ public AgentLogger getAgentLogger(final String name) {
+ return LOGGER_MAP.computeIfAbsent(name, key -> new
SLF4JAgentLogger(LoggerFactory.getLogger(name)));
}
}
diff --git
a/agent/log/log-to-slf4j/src/main/resources/META-INF/services/org.apache.shardingsphere.agent.log.spi.AgentLoggerFactorySPI
b/agent/log/log-to-slf4j/src/main/resources/META-INF/services/org.apache.shardingsphere.agent.log.spi.AgentLoggerFactorySPI
new file mode 100644
index 00000000000..da4b26b7542
--- /dev/null
+++
b/agent/log/log-to-slf4j/src/main/resources/META-INF/services/org.apache.shardingsphere.agent.log.spi.AgentLoggerFactorySPI
@@ -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.agent.log.slf4j.SLF4JAgentLoggerFactory
diff --git a/agent/log/pom.xml b/agent/log/pom.xml
new file mode 100644
index 00000000000..067b9a3fd84
--- /dev/null
+++ b/agent/log/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-agent</artifactId>
+ <version>5.3.2-SNAPSHOT</version>
+ </parent>
+ <artifactId>shardingsphere-agent-log</artifactId>
+ <packaging>pom</packaging>
+ <name>${project.artifactId}</name>
+
+ <modules>
+ <module>log-api</module>
+ <module>log-to-slf4j</module>
+ </modules>
+</project>
diff --git a/agent/pom.xml b/agent/pom.xml
index a66e7864252..5b89fa711b8 100644
--- a/agent/pom.xml
+++ b/agent/pom.xml
@@ -32,6 +32,7 @@
<module>api</module>
<module>core</module>
<module>plugins</module>
+ <module>log</module>
</modules>
<properties>
diff --git a/distribution/agent/pom.xml b/distribution/agent/pom.xml
index 21b7d7a85c5..92fc080f1d8 100644
--- a/distribution/agent/pom.xml
+++ b/distribution/agent/pom.xml
@@ -64,6 +64,11 @@
<artifactId>shardingsphere-agent-tracing-opentelemetry</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-agent-log-to-slf4j</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
diff --git
a/distribution/agent/src/main/assembly/shardingsphere-agent-binary-distribution.xml
b/distribution/agent/src/main/assembly/shardingsphere-agent-binary-distribution.xml
index 54283f801c6..8e42293b270 100644
---
a/distribution/agent/src/main/assembly/shardingsphere-agent-binary-distribution.xml
+++
b/distribution/agent/src/main/assembly/shardingsphere-agent-binary-distribution.xml
@@ -99,6 +99,7 @@
<includes>
<include>org.slf4j:slf4j-api</include>
<include>ch.qos.logback:*</include>
+
<include>org.apache.shardingsphere:shardingsphere-agent-log-to-slf4j</include>
</includes>
</dependencySet>
</dependencySets>