From 4d30b042ee2bbd387ef6774e293310e107737b94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=BF=8A=20SionYang?= Date: Tue, 23 Apr 2024 10:24:38 +0800 Subject: [PATCH] [ISSUE #11956] Move logback 12 and log4j2 adapter to single module. (#11996) * Move some basic logging classes into common module. * Move logback 12 version adapter to single module. * For checkstyle. * Enhance logger adapter pom. * Refactor the adapter initialization logic to avoid spi loader error. * Move log4j2 logger adapter to single module. * Fix the ut cover and create useless dir. --- .github/workflows/ci.yml | 2 +- client/pom.xml | 46 ++++----- .../nacos/client/logging/NacosLogging.java | 31 ++++-- .../client/logging/NacosLoggingTest.java | 5 +- .../common}/logging/NacosLoggingAdapter.java | 2 +- .../logging/NacosLoggingAdapterBuilder.java | 32 +++--- .../logging/NacosLoggingProperties.java | 18 ++-- .../logging/NacosLoggingPropertiesTest.java | 76 +++++++++++++++ .../core/remote/ConnectionManagerTest.java | 2 + logger-adapter-impl/log4j2-adapter/pom.xml | 55 +++++++++++ .../log4j2/Log4J2NacosLoggingAdapter.java | 9 +- .../Log4j2NacosLoggingAdapterBuilder.java | 33 +++++++ .../Log4j2NacosLoggingPropertiesHolder.java | 46 +++++++++ .../log4j2/NacosClientPropertiesLookup.java | 15 ++- ....common.logging.NacosLoggingAdapterBuilder | 3 +- .../src/main/resources/nacos-log4j2.xml | 0 .../log4j2/Log4J2NacosLoggingAdapterTest.java | 15 +-- .../Log4j2NacosLoggingAdapterBuilderTest.java | 34 +++++++ .../NacosClientPropertiesLookupTest.java | 10 +- .../logback-adapter-12/pom.xml | 58 +++++++++++ .../LogbackNacosLoggingAdapter.java | 19 ++-- .../LogbackNacosLoggingAdapterBuilder.java | 33 +++++++ .../logback12}/NacosClientPropertyAction.java | 18 ++-- .../NacosLogbackConfiguratorAdapterV1.java | 23 ++--- ...a.nacos.common.logging.NacosLoggingAdapter | 17 ++++ ....common.logging.NacosLoggingAdapterBuilder | 17 ++++ .../src/main/resources/nacos-logback12.xml | 0 ...LogbackNacosLoggingAdapterBuilderTest.java | 34 +++++++ .../LogbackNacosLoggingAdapterTest.java | 16 +-- .../NacosClientPropertyActionTest.java | 19 ++-- ...NacosLogbackConfiguratorAdapterV1Test.java | 2 +- logger-adapter-impl/pom.xml | 97 +++++++++++++++++++ pom.xml | 1 + 33 files changed, 667 insertions(+), 121 deletions(-) rename {client/src/main/java/com/alibaba/nacos/client => common/src/main/java/com/alibaba/nacos/common}/logging/NacosLoggingAdapter.java (97%) rename client/src/main/java/com/alibaba/nacos/client/logging/logback/NacosLogbackConfigurator.java => common/src/main/java/com/alibaba/nacos/common/logging/NacosLoggingAdapterBuilder.java (57%) rename {client/src/main/java/com/alibaba/nacos/client => common/src/main/java/com/alibaba/nacos/common}/logging/NacosLoggingProperties.java (81%) create mode 100644 common/src/test/java/com/alibaba/nacos/common/logging/NacosLoggingPropertiesTest.java create mode 100644 logger-adapter-impl/log4j2-adapter/pom.xml rename {client/src/main/java/com/alibaba/nacos/client/logging => logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter}/log4j2/Log4J2NacosLoggingAdapter.java (94%) create mode 100644 logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/Log4j2NacosLoggingAdapterBuilder.java create mode 100644 logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/Log4j2NacosLoggingPropertiesHolder.java rename {client/src/main/java/com/alibaba/nacos/client/logging => logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter}/log4j2/NacosClientPropertiesLookup.java (67%) rename client/src/main/resources/META-INF/services/com.alibaba.nacos.client.logging.NacosLoggingAdapter => logger-adapter-impl/log4j2-adapter/src/main/resources/META-INF/services/com.alibaba.nacos.common.logging.NacosLoggingAdapterBuilder (81%) rename {client => logger-adapter-impl/log4j2-adapter}/src/main/resources/nacos-log4j2.xml (100%) rename {client/src/test/java/com/alibaba/nacos/client/logging => logger-adapter-impl/log4j2-adapter/src/test/java/com/alibaba/nacos/logger/adapter}/log4j2/Log4J2NacosLoggingAdapterTest.java (91%) create mode 100644 logger-adapter-impl/log4j2-adapter/src/test/java/com/alibaba/nacos/logger/adapter/log4j2/Log4j2NacosLoggingAdapterBuilderTest.java rename {client/src/test/java/com/alibaba/nacos/client/logging => logger-adapter-impl/log4j2-adapter/src/test/java/com/alibaba/nacos/logger/adapter}/log4j2/NacosClientPropertiesLookupTest.java (70%) create mode 100644 logger-adapter-impl/logback-adapter-12/pom.xml rename {client/src/main/java/com/alibaba/nacos/client/logging/logback => logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12}/LogbackNacosLoggingAdapter.java (92%) create mode 100644 logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapterBuilder.java rename {client/src/main/java/com/alibaba/nacos/client/logging/logback => logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12}/NacosClientPropertyAction.java (80%) rename {client/src/main/java/com/alibaba/nacos/client/logging/logback => logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12}/NacosLogbackConfiguratorAdapterV1.java (85%) create mode 100644 logger-adapter-impl/logback-adapter-12/src/main/resources/META-INF/services/com.alibaba.nacos.common.logging.NacosLoggingAdapter create mode 100644 logger-adapter-impl/logback-adapter-12/src/main/resources/META-INF/services/com.alibaba.nacos.common.logging.NacosLoggingAdapterBuilder rename client/src/main/resources/nacos-logback.xml => logger-adapter-impl/logback-adapter-12/src/main/resources/nacos-logback12.xml (100%) create mode 100644 logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapterBuilderTest.java rename {client/src/test/java/com/alibaba/nacos/client/logging/logback => logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12}/LogbackNacosLoggingAdapterTest.java (93%) rename {client/src/test/java/com/alibaba/nacos/client/logging/logback => logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12}/NacosClientPropertyActionTest.java (89%) rename {client/src/test/java/com/alibaba/nacos/client/logging/logback => logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12}/NacosLogbackConfiguratorAdapterV1Test.java (98%) create mode 100644 logger-adapter-impl/pom.xml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a696e3886..663a7d4bf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,4 +46,4 @@ jobs: - name: "Codecov" uses: codecov/codecov-action@v3.1.0 with: - files: ./address/target/site/jacoco/jacoco.xml,./config/target/site/jacoco/jacoco.xml,./api/target/site/jacoco/jacoco.xml,./auth/target/site/jacoco/jacoco.xml,./client/target/site/jacoco/jacoco.xml,./common/target/site/jacoco/jacoco.xml,./consistency/target/site/jacoco/jacoco.xml,./console/target/site/jacoco/jacoco.xml,./core/target/site/jacoco/jacoco.xml,./naming/target/site/jacoco/jacoco.xml,./persistence/target/site/jacoco/jacoco.xml,./plugin-default-impl/nacos-default-auth-plugin/target/site/jacoco/jacoco.xml,./plugin/auth/target/site/jacoco/jacoco.xml,./plugin/config/target/site/jacoco/jacoco.xml,./plugin/control/target/site/jacoco/jacoco.xml,./plugin/datasource/target/site/jacoco/jacoco.xml,./plugin/encryption/target/site/jacoco/jacoco.xml,./plugin/environment/target/site/jacoco/jacoco.xml,./plugin/trace/target/site/jacoco/jacoco.xml,./prometheus/target/site/jacoco/jacoco.xml,./sys/target/site/jacoco/jacoco.xml + files: ./address/target/site/jacoco/jacoco.xml,./api/target/site/jacoco/jacoco.xml,./auth/target/site/jacoco/jacoco.xml,./client/target/site/jacoco/jacoco.xml,./common/target/site/jacoco/jacoco.xml,./config/target/site/jacoco/jacoco.xml,./consistency/target/site/jacoco/jacoco.xml,./console/target/site/jacoco/jacoco.xml,./core/target/site/jacoco/jacoco.xml,./logger-adapter-impl/log4j2-adapter/target/site/jacoco/jacoco.xml,./logger-adapter-impl/logback-adapter-12/target/site/jacoco/jacoco.xml,./naming/target/site/jacoco/jacoco.xml,./persistence/target/site/jacoco/jacoco.xml,./plugin-default-impl/nacos-default-auth-plugin/target/site/jacoco/jacoco.xml,./plugin-default-impl/nacos-default-control-plugin/target/site/jacoco/jacoco.xml,./plugin/auth/target/site/jacoco/jacoco.xml,./plugin/config/target/site/jacoco/jacoco.xml,./plugin/control/target/site/jacoco/jacoco.xml,./plugin/datasource/target/site/jacoco/jacoco.xml,./plugin/encryption/target/site/jacoco/jacoco.xml,./plugin/environment/target/site/jacoco/jacoco.xml,./plugin/trace/target/site/jacoco/jacoco.xml,./prometheus/target/site/jacoco/jacoco.xml,./sys/target/site/jacoco/jacoco.xml diff --git a/client/pom.xml b/client/pom.xml index d35bf55e3..2098ee5e4 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -39,25 +39,12 @@ slf4j-api true - + - org.apache.logging.log4j - log4j-core + ${project.groupId} + nacos-api true - - - org.apache.logging.log4j - log4j-api - true - - - - org.apache.logging.log4j - log4j-slf4j-impl - true - - ${project.groupId} nacos-common @@ -75,19 +62,32 @@ - ${project.groupId} - nacos-api + com.alibaba.nacos + nacos-logback-adapter-12 + ${project.version} + + + + com.alibaba.nacos + nacos-log4j2-adapter + ${project.version} + + + + org.apache.logging.log4j + log4j-core true + - ch.qos.logback - logback-classic + org.apache.logging.log4j + log4j-api true - + - ch.qos.logback - logback-core + org.apache.logging.log4j + log4j-slf4j-impl true diff --git a/client/src/main/java/com/alibaba/nacos/client/logging/NacosLogging.java b/client/src/main/java/com/alibaba/nacos/client/logging/NacosLogging.java index ab0e0ddcd..45c231d50 100644 --- a/client/src/main/java/com/alibaba/nacos/client/logging/NacosLogging.java +++ b/client/src/main/java/com/alibaba/nacos/client/logging/NacosLogging.java @@ -16,8 +16,12 @@ package com.alibaba.nacos.client.logging; +import com.alibaba.nacos.client.env.NacosClientProperties; import com.alibaba.nacos.common.executor.ExecutorFactory; import com.alibaba.nacos.common.executor.NameThreadFactory; +import com.alibaba.nacos.common.logging.NacosLoggingAdapter; +import com.alibaba.nacos.common.logging.NacosLoggingAdapterBuilder; +import com.alibaba.nacos.common.logging.NacosLoggingProperties; import com.alibaba.nacos.common.spi.NacosServiceLoader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,13 +48,15 @@ public class NacosLogging { private void initLoggingAdapter() { Class loggerClass = LOGGER.getClass(); - for (NacosLoggingAdapter each : NacosServiceLoader.load(NacosLoggingAdapter.class)) { - LOGGER.info("Nacos Logging Adapter: {}", each.getClass().getName()); - if (each.isEnabled() && each.isAdaptedLogger(loggerClass)) { - LOGGER.info("Nacos Logging Adapter: {} match {} success.", each.getClass().getName(), + for (NacosLoggingAdapterBuilder each : NacosServiceLoader.load(NacosLoggingAdapterBuilder.class)) { + LOGGER.info("Nacos Logging Adapter Builder: {}", each.getClass().getName()); + NacosLoggingAdapter tempLoggingAdapter = buildLoggingAdapterFromBuilder(each); + if (isAdaptLogging(tempLoggingAdapter, loggerClass)) { + LOGGER.info("Nacos Logging Adapter: {} match {} success.", tempLoggingAdapter.getClass().getName(), loggerClass.getName()); - loggingProperties = new NacosLoggingProperties(each.getDefaultConfigLocation()); - loggingAdapter = each; + loggingProperties = new NacosLoggingProperties(tempLoggingAdapter.getDefaultConfigLocation(), + NacosClientProperties.PROTOTYPE.asProperties()); + loggingAdapter = tempLoggingAdapter; } } if (null == loggingAdapter) { @@ -60,6 +66,19 @@ public class NacosLogging { scheduleReloadTask(); } + private NacosLoggingAdapter buildLoggingAdapterFromBuilder(NacosLoggingAdapterBuilder builder) { + try { + return builder.build(); + } catch (Throwable e) { + LOGGER.warn("Build Nacos Logging Adapter failed: {}", e.getMessage()); + return null; + } + } + + private boolean isAdaptLogging(NacosLoggingAdapter loggingAdapter, Class loggerClass) { + return null != loggingAdapter && loggingAdapter.isEnabled() && loggingAdapter.isAdaptedLogger(loggerClass); + } + private void scheduleReloadTask() { ScheduledExecutorService reloadContextService = ExecutorFactory.Managed .newSingleScheduledExecutorService("Nacos-Client", diff --git a/client/src/test/java/com/alibaba/nacos/client/logging/NacosLoggingTest.java b/client/src/test/java/com/alibaba/nacos/client/logging/NacosLoggingTest.java index 2b9759cf9..b2d94d424 100644 --- a/client/src/test/java/com/alibaba/nacos/client/logging/NacosLoggingTest.java +++ b/client/src/test/java/com/alibaba/nacos/client/logging/NacosLoggingTest.java @@ -18,6 +18,8 @@ package com.alibaba.nacos.client.logging; +import com.alibaba.nacos.common.logging.NacosLoggingAdapter; +import com.alibaba.nacos.common.logging.NacosLoggingProperties; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -27,6 +29,7 @@ import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import java.lang.reflect.Field; +import java.util.Properties; import static org.mockito.Mockito.doThrow; @@ -42,7 +45,7 @@ public class NacosLoggingTest { @Before public void setUp() throws NoSuchFieldException, IllegalAccessException { - loggingProperties = new NacosLoggingProperties(""); + loggingProperties = new NacosLoggingProperties("", new Properties()); instance = NacosLogging.getInstance(); Field loggingPropertiesField = NacosLogging.class.getDeclaredField("loggingProperties"); loggingPropertiesField.setAccessible(true); diff --git a/client/src/main/java/com/alibaba/nacos/client/logging/NacosLoggingAdapter.java b/common/src/main/java/com/alibaba/nacos/common/logging/NacosLoggingAdapter.java similarity index 97% rename from client/src/main/java/com/alibaba/nacos/client/logging/NacosLoggingAdapter.java rename to common/src/main/java/com/alibaba/nacos/common/logging/NacosLoggingAdapter.java index 5fb9f549f..365655e03 100644 --- a/client/src/main/java/com/alibaba/nacos/client/logging/NacosLoggingAdapter.java +++ b/common/src/main/java/com/alibaba/nacos/common/logging/NacosLoggingAdapter.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.alibaba.nacos.client.logging; +package com.alibaba.nacos.common.logging; /** * Nacos client logging adapter. diff --git a/client/src/main/java/com/alibaba/nacos/client/logging/logback/NacosLogbackConfigurator.java b/common/src/main/java/com/alibaba/nacos/common/logging/NacosLoggingAdapterBuilder.java similarity index 57% rename from client/src/main/java/com/alibaba/nacos/client/logging/logback/NacosLogbackConfigurator.java rename to common/src/main/java/com/alibaba/nacos/common/logging/NacosLoggingAdapterBuilder.java index b3085c2cf..289684176 100644 --- a/client/src/main/java/com/alibaba/nacos/client/logging/logback/NacosLogbackConfigurator.java +++ b/common/src/main/java/com/alibaba/nacos/common/logging/NacosLoggingAdapterBuilder.java @@ -14,26 +14,26 @@ * limitations under the License. */ -package com.alibaba.nacos.client.logging.logback; - -import java.net.URL; +package com.alibaba.nacos.common.logging; /** - * logback configurator interface,different version can adapter this. - * @author hujun + * Builder of {@link NacosLoggingAdapter}. + * + *

+ * Why not directly SPI {@link NacosLoggingAdapter}? + *

+ *

+ * To avoid some {@link NacosLoggingAdapter} initialization error casue the SPI loader exit. + *

+ * + * @author xiweng.yy */ -public interface NacosLogbackConfigurator { +public interface NacosLoggingAdapterBuilder { /** - * config logback. - * @param resourceUrl resourceUrl - * @throws Exception exception + * Build {@link NacosLoggingAdapter} implementation. + * + * @return {@link NacosLoggingAdapter} */ - void configure(URL resourceUrl) throws Exception; - - /** - * set loggerContext. - * @param loggerContext loggerContext - */ - void setContext(Object loggerContext); + NacosLoggingAdapter build(); } diff --git a/client/src/main/java/com/alibaba/nacos/client/logging/NacosLoggingProperties.java b/common/src/main/java/com/alibaba/nacos/common/logging/NacosLoggingProperties.java similarity index 81% rename from client/src/main/java/com/alibaba/nacos/client/logging/NacosLoggingProperties.java rename to common/src/main/java/com/alibaba/nacos/common/logging/NacosLoggingProperties.java index bd2a96b0e..3a870abae 100644 --- a/client/src/main/java/com/alibaba/nacos/client/logging/NacosLoggingProperties.java +++ b/common/src/main/java/com/alibaba/nacos/common/logging/NacosLoggingProperties.java @@ -14,12 +14,13 @@ * limitations under the License. */ -package com.alibaba.nacos.client.logging; +package com.alibaba.nacos.common.logging; -import com.alibaba.nacos.client.env.NacosClientProperties; import com.alibaba.nacos.common.utils.ConvertUtils; import com.alibaba.nacos.common.utils.StringUtils; +import java.util.Properties; + /** * Nacos Logging Properties, save some nacos logging properties. * @@ -37,8 +38,11 @@ public class NacosLoggingProperties { private final String defaultLocation; - public NacosLoggingProperties(String defaultLocation) { + private final Properties properties; + + public NacosLoggingProperties(String defaultLocation, Properties properties) { this.defaultLocation = defaultLocation; + this.properties = null == properties ? new Properties() : properties; } /** @@ -47,7 +51,7 @@ public class NacosLoggingProperties { * @return location of nacos logging configuration */ public String getLocation() { - String location = NacosClientProperties.PROTOTYPE.getProperty(NACOS_LOGGING_CONFIG_PROPERTY); + String location = properties.getProperty(NACOS_LOGGING_CONFIG_PROPERTY); if (StringUtils.isBlank(location)) { if (isDefaultLocationEnabled()) { return defaultLocation; @@ -65,7 +69,7 @@ public class NacosLoggingProperties { * @return {@code true} if default location enabled, otherwise {@code false}, default is {@code true} */ private boolean isDefaultLocationEnabled() { - String property = NacosClientProperties.PROTOTYPE.getProperty(NACOS_LOGGING_DEFAULT_CONFIG_ENABLED_PROPERTY); + String property = properties.getProperty(NACOS_LOGGING_DEFAULT_CONFIG_ENABLED_PROPERTY); return property == null || ConvertUtils.toBoolean(property); } @@ -75,7 +79,7 @@ public class NacosLoggingProperties { * @return reload internal */ public long getReloadInternal() { - String interval = NacosClientProperties.PROTOTYPE.getProperty(NACOS_LOGGING_RELOAD_INTERVAL_PROPERTY); + String interval = properties.getProperty(NACOS_LOGGING_RELOAD_INTERVAL_PROPERTY); return ConvertUtils.toLong(interval, DEFAULT_NACOS_LOGGING_RELOAD_INTERVAL); } @@ -87,6 +91,6 @@ public class NacosLoggingProperties { * @return value */ public String getValue(String source, String defaultValue) { - return NacosClientProperties.PROTOTYPE.getProperty(source, defaultValue); + return properties.getProperty(source, defaultValue); } } diff --git a/common/src/test/java/com/alibaba/nacos/common/logging/NacosLoggingPropertiesTest.java b/common/src/test/java/com/alibaba/nacos/common/logging/NacosLoggingPropertiesTest.java new file mode 100644 index 000000000..e823da977 --- /dev/null +++ b/common/src/test/java/com/alibaba/nacos/common/logging/NacosLoggingPropertiesTest.java @@ -0,0 +1,76 @@ +/* + * Copyright 1999-2023 Alibaba Group Holding Ltd. + * + * Licensed 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 com.alibaba.nacos.common.logging; + +import org.junit.Before; +import org.junit.Test; + +import java.util.Properties; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +public class NacosLoggingPropertiesTest { + + NacosLoggingProperties loggingProperties; + + Properties properties; + + @Before + public void setUp() throws Exception { + properties = new Properties(); + loggingProperties = new NacosLoggingProperties("classpath:test.xml", properties); + } + + @Test + public void testGetLocationWithDefault() { + assertEquals("classpath:test.xml", loggingProperties.getLocation()); + } + + @Test + public void testGetLocationWithoutDefault() { + properties.setProperty("nacos.logging.default.config.enabled", "false"); + assertNull(loggingProperties.getLocation()); + } + + @Test + public void testGetLocationForSpecified() { + properties.setProperty("nacos.logging.config", "classpath:specified-test.xml"); + properties.setProperty("nacos.logging.default.config.enabled", "false"); + assertEquals("classpath:specified-test.xml", loggingProperties.getLocation()); + } + + @Test + public void testGetLocationForSpecifiedWithDefault() { + properties.setProperty("nacos.logging.config", "classpath:specified-test.xml"); + assertEquals("classpath:specified-test.xml", loggingProperties.getLocation()); + } + + @Test + public void testGetReloadInternal() { + properties.setProperty("nacos.logging.reload.interval.seconds", "50000"); + assertEquals(50000L, loggingProperties.getReloadInternal()); + } + + @Test + public void testGetValue() { + properties.setProperty("test.key", "test.value"); + assertEquals("test.value", loggingProperties.getValue("test.key", "default.value")); + properties.clear(); + assertEquals("default.value", loggingProperties.getValue("test.key", "default.value")); + } +} \ No newline at end of file diff --git a/core/src/test/java/com/alibaba/nacos/core/remote/ConnectionManagerTest.java b/core/src/test/java/com/alibaba/nacos/core/remote/ConnectionManagerTest.java index d33b95f0d..622c6bb45 100644 --- a/core/src/test/java/com/alibaba/nacos/core/remote/ConnectionManagerTest.java +++ b/core/src/test/java/com/alibaba/nacos/core/remote/ConnectionManagerTest.java @@ -35,6 +35,7 @@ import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.mock.env.MockEnvironment; import java.io.File; import java.util.HashMap; @@ -87,6 +88,7 @@ public class ConnectionManagerTest { @Before public void setUp() { + EnvUtil.setEnvironment(new MockEnvironment()); // create base file path File baseDir = new File(EnvUtil.getNacosHome(), "data"); if (!baseDir.exists()) { diff --git a/logger-adapter-impl/log4j2-adapter/pom.xml b/logger-adapter-impl/log4j2-adapter/pom.xml new file mode 100644 index 000000000..ac410ad34 --- /dev/null +++ b/logger-adapter-impl/log4j2-adapter/pom.xml @@ -0,0 +1,55 @@ + + + + + + nacos-logger-adapter-impl + com.alibaba.nacos + ${revision} + + 4.0.0 + + nacos-log4j2-adapter + nacos-log4j2-adapter ${revision} + Nacos client log4j2 adapter pom.xml file + + + + org.apache.logging.log4j + log4j-core + provided + true + + + + org.apache.logging.log4j + log4j-api + provided + true + + + + org.apache.logging.log4j + log4j-slf4j-impl + provided + true + + + + \ No newline at end of file diff --git a/client/src/main/java/com/alibaba/nacos/client/logging/log4j2/Log4J2NacosLoggingAdapter.java b/logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/Log4J2NacosLoggingAdapter.java similarity index 94% rename from client/src/main/java/com/alibaba/nacos/client/logging/log4j2/Log4J2NacosLoggingAdapter.java rename to logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/Log4J2NacosLoggingAdapter.java index 3e2382c3f..758e95385 100644 --- a/client/src/main/java/com/alibaba/nacos/client/logging/log4j2/Log4J2NacosLoggingAdapter.java +++ b/logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/Log4J2NacosLoggingAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2023 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,10 +14,10 @@ * limitations under the License. */ -package com.alibaba.nacos.client.logging.log4j2; +package com.alibaba.nacos.logger.adapter.log4j2; -import com.alibaba.nacos.client.logging.NacosLoggingAdapter; -import com.alibaba.nacos.client.logging.NacosLoggingProperties; +import com.alibaba.nacos.common.logging.NacosLoggingAdapter; +import com.alibaba.nacos.common.logging.NacosLoggingProperties; import com.alibaba.nacos.common.utils.ResourceUtils; import com.alibaba.nacos.common.utils.StringUtils; import org.apache.logging.log4j.LogManager; @@ -87,6 +87,7 @@ public class Log4J2NacosLoggingAdapter implements NacosLoggingAdapter { @Override public void loadConfiguration(NacosLoggingProperties loggingProperties) { + Log4j2NacosLoggingPropertiesHolder.setProperties(loggingProperties); String location = loggingProperties.getLocation(); loadConfiguration(location); } diff --git a/logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/Log4j2NacosLoggingAdapterBuilder.java b/logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/Log4j2NacosLoggingAdapterBuilder.java new file mode 100644 index 000000000..f7453e526 --- /dev/null +++ b/logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/Log4j2NacosLoggingAdapterBuilder.java @@ -0,0 +1,33 @@ +/* + * Copyright 1999-2023 Alibaba Group Holding Ltd. + * + * Licensed 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 com.alibaba.nacos.logger.adapter.log4j2; + +import com.alibaba.nacos.common.logging.NacosLoggingAdapter; +import com.alibaba.nacos.common.logging.NacosLoggingAdapterBuilder; + +/** + * Builder of {@link com.alibaba.nacos.common.logging.NacosLoggingAdapter} for log4j2. + * + * @author xiweng.yy + */ +public class Log4j2NacosLoggingAdapterBuilder implements NacosLoggingAdapterBuilder { + + @Override + public NacosLoggingAdapter build() { + return new Log4J2NacosLoggingAdapter(); + } +} diff --git a/logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/Log4j2NacosLoggingPropertiesHolder.java b/logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/Log4j2NacosLoggingPropertiesHolder.java new file mode 100644 index 000000000..ccdb187bd --- /dev/null +++ b/logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/Log4j2NacosLoggingPropertiesHolder.java @@ -0,0 +1,46 @@ +/* + * Copyright 1999-2023 Alibaba Group Holding Ltd. + * + * Licensed 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 com.alibaba.nacos.logger.adapter.log4j2; + +import com.alibaba.nacos.common.logging.NacosLoggingProperties; +import org.apache.logging.log4j.core.config.plugins.Plugin; + +/** + * Log4j2 nacos logging properties holder. + * + *

+ * Log4j2 use {@link Plugin} annotation to inject Properties lookup to set properties, this holder is to keep the {@link + * NacosLoggingProperties} and called in {@link NacosClientPropertiesLookup} which is annotate by {@link Plugin}. + *

+ * + * @author xiweng.yy + */ +public class Log4j2NacosLoggingPropertiesHolder { + + private static final Log4j2NacosLoggingPropertiesHolder INSTANCE = new Log4j2NacosLoggingPropertiesHolder(); + + private NacosLoggingProperties properties; + + public static void setProperties(NacosLoggingProperties properties) { + INSTANCE.properties = properties; + } + + public static String getValue(String key) { + return null == INSTANCE.properties ? null : INSTANCE.properties.getValue(key, null); + } + +} diff --git a/client/src/main/java/com/alibaba/nacos/client/logging/log4j2/NacosClientPropertiesLookup.java b/logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/NacosClientPropertiesLookup.java similarity index 67% rename from client/src/main/java/com/alibaba/nacos/client/logging/log4j2/NacosClientPropertiesLookup.java rename to logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/NacosClientPropertiesLookup.java index 43068aa26..3070a69fa 100644 --- a/client/src/main/java/com/alibaba/nacos/client/logging/log4j2/NacosClientPropertiesLookup.java +++ b/logger-adapter-impl/log4j2-adapter/src/main/java/com/alibaba/nacos/logger/adapter/log4j2/NacosClientPropertiesLookup.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2022 Alibaba Group Holding Ltd. + * Copyright 1999-2023 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,25 +14,24 @@ * limitations under the License. */ -package com.alibaba.nacos.client.logging.log4j2; +package com.alibaba.nacos.logger.adapter.log4j2; -import com.alibaba.nacos.client.env.NacosClientProperties; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.lookup.AbstractLookup; import org.apache.logging.log4j.core.lookup.StrLookup; /** - * support log4j2 read properties from NacosClientProperties. - * for example: - * + * support log4j2 read properties from NacosClientProperties. for example: + * + * * @author onewe */ @Plugin(name = "nacosClientProperty", category = StrLookup.CATEGORY) -public class NacosClientPropertiesLookup extends AbstractLookup { +public class NacosClientPropertiesLookup extends AbstractLookup { @Override public String lookup(LogEvent event, String key) { - return NacosClientProperties.PROTOTYPE.getProperty(key); + return Log4j2NacosLoggingPropertiesHolder.getValue(key); } } \ No newline at end of file diff --git a/client/src/main/resources/META-INF/services/com.alibaba.nacos.client.logging.NacosLoggingAdapter b/logger-adapter-impl/log4j2-adapter/src/main/resources/META-INF/services/com.alibaba.nacos.common.logging.NacosLoggingAdapterBuilder similarity index 81% rename from client/src/main/resources/META-INF/services/com.alibaba.nacos.client.logging.NacosLoggingAdapter rename to logger-adapter-impl/log4j2-adapter/src/main/resources/META-INF/services/com.alibaba.nacos.common.logging.NacosLoggingAdapterBuilder index 4d8c82c4f..33389b66e 100644 --- a/client/src/main/resources/META-INF/services/com.alibaba.nacos.client.logging.NacosLoggingAdapter +++ b/logger-adapter-impl/log4j2-adapter/src/main/resources/META-INF/services/com.alibaba.nacos.common.logging.NacosLoggingAdapterBuilder @@ -14,5 +14,4 @@ # limitations under the License. # -com.alibaba.nacos.client.logging.logback.LogbackNacosLoggingAdapter -com.alibaba.nacos.client.logging.log4j2.Log4J2NacosLoggingAdapter \ No newline at end of file +com.alibaba.nacos.logger.adapter.log4j2.Log4j2NacosLoggingAdapterBuilder \ No newline at end of file diff --git a/client/src/main/resources/nacos-log4j2.xml b/logger-adapter-impl/log4j2-adapter/src/main/resources/nacos-log4j2.xml similarity index 100% rename from client/src/main/resources/nacos-log4j2.xml rename to logger-adapter-impl/log4j2-adapter/src/main/resources/nacos-log4j2.xml diff --git a/client/src/test/java/com/alibaba/nacos/client/logging/log4j2/Log4J2NacosLoggingAdapterTest.java b/logger-adapter-impl/log4j2-adapter/src/test/java/com/alibaba/nacos/logger/adapter/log4j2/Log4J2NacosLoggingAdapterTest.java similarity index 91% rename from client/src/test/java/com/alibaba/nacos/client/logging/log4j2/Log4J2NacosLoggingAdapterTest.java rename to logger-adapter-impl/log4j2-adapter/src/test/java/com/alibaba/nacos/logger/adapter/log4j2/Log4J2NacosLoggingAdapterTest.java index a0e0fe09a..1c3e1a70e 100644 --- a/client/src/test/java/com/alibaba/nacos/client/logging/log4j2/Log4J2NacosLoggingAdapterTest.java +++ b/logger-adapter-impl/log4j2-adapter/src/test/java/com/alibaba/nacos/logger/adapter/log4j2/Log4J2NacosLoggingAdapterTest.java @@ -1,6 +1,5 @@ /* - * - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2023 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,12 +12,11 @@ * 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 com.alibaba.nacos.client.logging.log4j2; +package com.alibaba.nacos.logger.adapter.log4j2; -import com.alibaba.nacos.client.logging.NacosLoggingProperties; +import com.alibaba.nacos.common.logging.NacosLoggingProperties; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.config.Configuration; @@ -39,6 +37,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; import java.util.Map; +import java.util.logging.Logger; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -64,7 +63,7 @@ public class Log4J2NacosLoggingAdapterTest { @Before public void setUp() throws Exception { log4J2NacosLoggingAdapter = new Log4J2NacosLoggingAdapter(); - nacosLoggingProperties = new NacosLoggingProperties("classpath:nacos-log4j2.xml"); + nacosLoggingProperties = new NacosLoggingProperties("classpath:nacos-log4j2.xml", System.getProperties()); LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false); loggerContext.addPropertyChangeListener(propertyChangeListener); } @@ -81,7 +80,7 @@ public class Log4J2NacosLoggingAdapterTest { @Test public void testIsAdaptedLogger() { assertTrue(log4J2NacosLoggingAdapter.isAdaptedLogger(org.apache.logging.slf4j.Log4jLogger.class)); - assertFalse(log4J2NacosLoggingAdapter.isAdaptedLogger(ch.qos.logback.classic.Logger.class)); + assertFalse(log4J2NacosLoggingAdapter.isAdaptedLogger(Logger.class)); } @Test @@ -117,6 +116,7 @@ public class Log4J2NacosLoggingAdapterTest { @Test public void testLoadConfigurationWithoutLocation() { System.setProperty("nacos.logging.default.config.enabled", "false"); + nacosLoggingProperties = new NacosLoggingProperties("classpath:nacos-log4j2.xml", System.getProperties()); log4J2NacosLoggingAdapter = new Log4J2NacosLoggingAdapter(); log4J2NacosLoggingAdapter.loadConfiguration(nacosLoggingProperties); verify(propertyChangeListener, never()).propertyChange(any()); @@ -125,6 +125,7 @@ public class Log4J2NacosLoggingAdapterTest { @Test(expected = IllegalStateException.class) public void testLoadConfigurationWithWrongLocation() { System.setProperty("nacos.logging.config", "http://localhost"); + nacosLoggingProperties = new NacosLoggingProperties("classpath:nacos-log4j2.xml", System.getProperties()); log4J2NacosLoggingAdapter = new Log4J2NacosLoggingAdapter(); log4J2NacosLoggingAdapter.loadConfiguration(nacosLoggingProperties); verify(propertyChangeListener, never()).propertyChange(any()); diff --git a/logger-adapter-impl/log4j2-adapter/src/test/java/com/alibaba/nacos/logger/adapter/log4j2/Log4j2NacosLoggingAdapterBuilderTest.java b/logger-adapter-impl/log4j2-adapter/src/test/java/com/alibaba/nacos/logger/adapter/log4j2/Log4j2NacosLoggingAdapterBuilderTest.java new file mode 100644 index 000000000..a8db92239 --- /dev/null +++ b/logger-adapter-impl/log4j2-adapter/src/test/java/com/alibaba/nacos/logger/adapter/log4j2/Log4j2NacosLoggingAdapterBuilderTest.java @@ -0,0 +1,34 @@ +/* + * Copyright 1999-2023 Alibaba Group Holding Ltd. + * + * Licensed 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 com.alibaba.nacos.logger.adapter.log4j2; + +import com.alibaba.nacos.common.logging.NacosLoggingAdapter; +import org.junit.Test; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public class Log4j2NacosLoggingAdapterBuilderTest { + + @Test + public void build() { + Log4j2NacosLoggingAdapterBuilder builder = new Log4j2NacosLoggingAdapterBuilder(); + NacosLoggingAdapter adapter = builder.build(); + assertNotNull(adapter); + assertTrue(adapter instanceof Log4J2NacosLoggingAdapter); + } +} \ No newline at end of file diff --git a/client/src/test/java/com/alibaba/nacos/client/logging/log4j2/NacosClientPropertiesLookupTest.java b/logger-adapter-impl/log4j2-adapter/src/test/java/com/alibaba/nacos/logger/adapter/log4j2/NacosClientPropertiesLookupTest.java similarity index 70% rename from client/src/test/java/com/alibaba/nacos/client/logging/log4j2/NacosClientPropertiesLookupTest.java rename to logger-adapter-impl/log4j2-adapter/src/test/java/com/alibaba/nacos/logger/adapter/log4j2/NacosClientPropertiesLookupTest.java index bdc5f36cd..d193ac2d6 100644 --- a/client/src/test/java/com/alibaba/nacos/client/logging/log4j2/NacosClientPropertiesLookupTest.java +++ b/logger-adapter-impl/log4j2-adapter/src/test/java/com/alibaba/nacos/logger/adapter/log4j2/NacosClientPropertiesLookupTest.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2022 Alibaba Group Holding Ltd. + * Copyright 1999-2023 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.alibaba.nacos.client.logging.log4j2; +package com.alibaba.nacos.logger.adapter.log4j2; -import com.alibaba.nacos.client.env.NacosClientProperties; +import com.alibaba.nacos.common.logging.NacosLoggingProperties; import org.junit.Assert; import org.junit.Test; @@ -24,7 +24,9 @@ public class NacosClientPropertiesLookupTest { @Test public void testLookUp() { - NacosClientProperties.PROTOTYPE.setProperty("test.nacos.logging.lookup", "true"); + System.setProperty("test.nacos.logging.lookup", "true"); + NacosLoggingProperties properties = new NacosLoggingProperties("", System.getProperties()); + Log4j2NacosLoggingPropertiesHolder.setProperties(properties); NacosClientPropertiesLookup nacosClientPropertiesLookup = new NacosClientPropertiesLookup(); final String actual = nacosClientPropertiesLookup.lookup("test.nacos.logging.lookup"); Assert.assertEquals("true", actual); diff --git a/logger-adapter-impl/logback-adapter-12/pom.xml b/logger-adapter-impl/logback-adapter-12/pom.xml new file mode 100644 index 000000000..c0166d9ed --- /dev/null +++ b/logger-adapter-impl/logback-adapter-12/pom.xml @@ -0,0 +1,58 @@ + + + + + + nacos-logger-adapter-impl + com.alibaba.nacos + ${revision} + + 4.0.0 + + nacos-logback-adapter-12 + nacos-logback-adapter-12 ${revision} + Nacos client logback adapter for logback 1.2.x and lower version pom.xml file + + + + org.slf4j + slf4j-api + 1.7.26 + provided + true + + + + ch.qos.logback + logback-classic + 1.2.13 + provided + true + + + + ch.qos.logback + logback-core + 1.2.13 + provided + true + + + + \ No newline at end of file diff --git a/client/src/main/java/com/alibaba/nacos/client/logging/logback/LogbackNacosLoggingAdapter.java b/logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapter.java similarity index 92% rename from client/src/main/java/com/alibaba/nacos/client/logging/logback/LogbackNacosLoggingAdapter.java rename to logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapter.java index 982893567..75aa47405 100644 --- a/client/src/main/java/com/alibaba/nacos/client/logging/logback/LogbackNacosLoggingAdapter.java +++ b/logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2023 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,15 +14,15 @@ * limitations under the License. */ -package com.alibaba.nacos.client.logging.logback; +package com.alibaba.nacos.logger.adapter.logback12; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.LoggerContextListener; import ch.qos.logback.core.CoreConstants; -import com.alibaba.nacos.client.logging.NacosLoggingAdapter; -import com.alibaba.nacos.client.logging.NacosLoggingProperties; +import com.alibaba.nacos.common.logging.NacosLoggingAdapter; +import com.alibaba.nacos.common.logging.NacosLoggingProperties; import com.alibaba.nacos.common.utils.ResourceUtils; import com.alibaba.nacos.common.utils.StringUtils; import org.slf4j.LoggerFactory; @@ -37,15 +37,12 @@ import org.slf4j.LoggerFactory; */ public class LogbackNacosLoggingAdapter implements NacosLoggingAdapter { - private static final String NACOS_LOGBACK_LOCATION = "classpath:nacos-logback.xml"; + private static final String NACOS_LOGBACK_LOCATION = "classpath:nacos-logback12.xml"; private static final String LOGBACK_CLASSES = "ch.qos.logback.classic.Logger"; - private final NacosLogbackConfigurator configurator; + private final NacosLogbackConfiguratorAdapterV1 configurator; - /** - * logback use 'ch.qos.logback.core.model.Model' since 1.3.0, set logback version during initialization. - */ public LogbackNacosLoggingAdapter() { configurator = new NacosLogbackConfiguratorAdapterV1(); } @@ -67,6 +64,9 @@ public class LogbackNacosLoggingAdapter implements NacosLoggingAdapter { } } + /** + * logback use 'ch.qos.logback.core.model.Model' since 1.3.0, set logback version during initialization. + */ private boolean isUpperLogback13() { try { Class.forName("ch.qos.logback.core.model.Model"); @@ -89,6 +89,7 @@ public class LogbackNacosLoggingAdapter implements NacosLoggingAdapter { @Override public void loadConfiguration(NacosLoggingProperties loggingProperties) { String location = loggingProperties.getLocation(); + configurator.setLoggingProperties(loggingProperties); LoggerContext loggerContext = loadConfigurationOnStart(location); if (loggerContext.getObject(CoreConstants.RECONFIGURE_ON_CHANGE_TASK) != null && hasNoListener(loggerContext)) { addListener(loggerContext, location); diff --git a/logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapterBuilder.java b/logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapterBuilder.java new file mode 100644 index 000000000..252d2bb20 --- /dev/null +++ b/logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapterBuilder.java @@ -0,0 +1,33 @@ +/* + * Copyright 1999-2023 Alibaba Group Holding Ltd. + * + * Licensed 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 com.alibaba.nacos.logger.adapter.logback12; + +import com.alibaba.nacos.common.logging.NacosLoggingAdapter; +import com.alibaba.nacos.common.logging.NacosLoggingAdapterBuilder; + +/** + * Builder of {@link com.alibaba.nacos.common.logging.NacosLoggingAdapter} for logback 1.2.x and below. + * + * @author xiweng.yy + */ +public class LogbackNacosLoggingAdapterBuilder implements NacosLoggingAdapterBuilder { + + @Override + public NacosLoggingAdapter build() { + return new LogbackNacosLoggingAdapter(); + } +} diff --git a/client/src/main/java/com/alibaba/nacos/client/logging/logback/NacosClientPropertyAction.java b/logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12/NacosClientPropertyAction.java similarity index 80% rename from client/src/main/java/com/alibaba/nacos/client/logging/logback/NacosClientPropertyAction.java rename to logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12/NacosClientPropertyAction.java index 8031d35ea..4a02d838f 100644 --- a/client/src/main/java/com/alibaba/nacos/client/logging/logback/NacosClientPropertyAction.java +++ b/logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12/NacosClientPropertyAction.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2022 Alibaba Group Holding Ltd. + * Copyright 1999-2023 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,20 +14,20 @@ * limitations under the License. */ -package com.alibaba.nacos.client.logging.logback; +package com.alibaba.nacos.logger.adapter.logback12; import ch.qos.logback.core.joran.action.Action; import ch.qos.logback.core.joran.action.ActionUtil; import ch.qos.logback.core.joran.spi.ActionException; import ch.qos.logback.core.joran.spi.InterpretationContext; import ch.qos.logback.core.util.OptionHelper; -import com.alibaba.nacos.client.env.NacosClientProperties; +import com.alibaba.nacos.common.logging.NacosLoggingProperties; import org.xml.sax.Attributes; /** - * support logback read properties from NacosClientProperties. just like springProperty. - * for example: + * support logback read properties from NacosClientProperties. just like springProperty. for example: * + * * @author onewe */ class NacosClientPropertyAction extends Action { @@ -36,6 +36,12 @@ class NacosClientPropertyAction extends Action { private static final String SOURCE_ATTRIBUTE = "source"; + private final NacosLoggingProperties loggingProperties; + + NacosClientPropertyAction(NacosLoggingProperties loggingProperties) { + this.loggingProperties = loggingProperties; + } + @Override public void begin(InterpretationContext ic, String elementName, Attributes attributes) throws ActionException { String name = attributes.getValue(NAME_ATTRIBUTE); @@ -54,6 +60,6 @@ class NacosClientPropertyAction extends Action { } private String getValue(String source, String defaultValue) { - return NacosClientProperties.PROTOTYPE.getProperty(source, defaultValue); + return null == loggingProperties ? defaultValue : loggingProperties.getValue(source, defaultValue); } } \ No newline at end of file diff --git a/client/src/main/java/com/alibaba/nacos/client/logging/logback/NacosLogbackConfiguratorAdapterV1.java b/logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12/NacosLogbackConfiguratorAdapterV1.java similarity index 85% rename from client/src/main/java/com/alibaba/nacos/client/logging/logback/NacosLogbackConfiguratorAdapterV1.java rename to logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12/NacosLogbackConfiguratorAdapterV1.java index e8b16358c..cc9e69e89 100644 --- a/client/src/main/java/com/alibaba/nacos/client/logging/logback/NacosLogbackConfiguratorAdapterV1.java +++ b/logger-adapter-impl/logback-adapter-12/src/main/java/com/alibaba/nacos/logger/adapter/logback12/NacosLogbackConfiguratorAdapterV1.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2023 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,14 @@ * limitations under the License. */ -package com.alibaba.nacos.client.logging.logback; +package com.alibaba.nacos.logger.adapter.logback12; import ch.qos.logback.classic.joran.JoranConfigurator; -import ch.qos.logback.core.Context; import ch.qos.logback.core.joran.event.SaxEvent; import ch.qos.logback.core.joran.spi.ElementSelector; import ch.qos.logback.core.joran.spi.JoranException; import ch.qos.logback.core.joran.spi.RuleStore; +import com.alibaba.nacos.common.logging.NacosLoggingProperties; import java.io.IOException; import java.io.InputStream; @@ -35,7 +35,13 @@ import java.util.List; * @author hujun * @see #6999 */ -public class NacosLogbackConfiguratorAdapterV1 extends JoranConfigurator implements NacosLogbackConfigurator { +public class NacosLogbackConfiguratorAdapterV1 extends JoranConfigurator { + + private NacosLoggingProperties loggingProperties; + + public void setLoggingProperties(NacosLoggingProperties loggingProperties) { + this.loggingProperties = loggingProperties; + } /** * ensure that Nacos configuration does not affect user configuration savepoints. @@ -49,12 +55,8 @@ public class NacosLogbackConfiguratorAdapterV1 extends JoranConfigurator impleme @Override public void addInstanceRules(RuleStore rs) { super.addInstanceRules(rs); - rs.addRule(new ElementSelector("configuration/nacosClientProperty"), new NacosClientPropertyAction()); - } - - @Override - public void setContext(Object loggerContext) { - super.setContext((Context) loggerContext); + rs.addRule(new ElementSelector("configuration/nacosClientProperty"), + new NacosClientPropertyAction(loggingProperties)); } /** @@ -63,7 +65,6 @@ public class NacosLogbackConfiguratorAdapterV1 extends JoranConfigurator impleme * @param url config url * @throws Exception e */ - @Override public void configure(URL url) throws Exception { InputStream in = null; try { diff --git a/logger-adapter-impl/logback-adapter-12/src/main/resources/META-INF/services/com.alibaba.nacos.common.logging.NacosLoggingAdapter b/logger-adapter-impl/logback-adapter-12/src/main/resources/META-INF/services/com.alibaba.nacos.common.logging.NacosLoggingAdapter new file mode 100644 index 000000000..36efc9371 --- /dev/null +++ b/logger-adapter-impl/logback-adapter-12/src/main/resources/META-INF/services/com.alibaba.nacos.common.logging.NacosLoggingAdapter @@ -0,0 +1,17 @@ +# +# Copyright 1999-2023 Alibaba Group Holding Ltd. +# +# Licensed 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. +# + +com.alibaba.nacos.logger.adapter.logback12.LogbackNacosLoggingAdapter \ No newline at end of file diff --git a/logger-adapter-impl/logback-adapter-12/src/main/resources/META-INF/services/com.alibaba.nacos.common.logging.NacosLoggingAdapterBuilder b/logger-adapter-impl/logback-adapter-12/src/main/resources/META-INF/services/com.alibaba.nacos.common.logging.NacosLoggingAdapterBuilder new file mode 100644 index 000000000..2084f5d62 --- /dev/null +++ b/logger-adapter-impl/logback-adapter-12/src/main/resources/META-INF/services/com.alibaba.nacos.common.logging.NacosLoggingAdapterBuilder @@ -0,0 +1,17 @@ +# +# Copyright 1999-2023 Alibaba Group Holding Ltd. +# +# Licensed 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. +# + +com.alibaba.nacos.logger.adapter.logback12.LogbackNacosLoggingAdapterBuilder \ No newline at end of file diff --git a/client/src/main/resources/nacos-logback.xml b/logger-adapter-impl/logback-adapter-12/src/main/resources/nacos-logback12.xml similarity index 100% rename from client/src/main/resources/nacos-logback.xml rename to logger-adapter-impl/logback-adapter-12/src/main/resources/nacos-logback12.xml diff --git a/logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapterBuilderTest.java b/logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapterBuilderTest.java new file mode 100644 index 000000000..0325883ed --- /dev/null +++ b/logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapterBuilderTest.java @@ -0,0 +1,34 @@ +/* + * Copyright 1999-2023 Alibaba Group Holding Ltd. + * + * Licensed 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 com.alibaba.nacos.logger.adapter.logback12; + +import com.alibaba.nacos.common.logging.NacosLoggingAdapter; +import org.junit.Test; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public class LogbackNacosLoggingAdapterBuilderTest { + + @Test + public void build() { + LogbackNacosLoggingAdapterBuilder builder = new LogbackNacosLoggingAdapterBuilder(); + NacosLoggingAdapter adapter = builder.build(); + assertNotNull(adapter); + assertTrue(adapter instanceof LogbackNacosLoggingAdapter); + } +} \ No newline at end of file diff --git a/client/src/test/java/com/alibaba/nacos/client/logging/logback/LogbackNacosLoggingAdapterTest.java b/logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapterTest.java similarity index 93% rename from client/src/test/java/com/alibaba/nacos/client/logging/logback/LogbackNacosLoggingAdapterTest.java rename to logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapterTest.java index cc4aa6327..26e78daa5 100644 --- a/client/src/test/java/com/alibaba/nacos/client/logging/logback/LogbackNacosLoggingAdapterTest.java +++ b/logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12/LogbackNacosLoggingAdapterTest.java @@ -1,6 +1,5 @@ /* - * - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2023 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,17 +12,16 @@ * 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 com.alibaba.nacos.client.logging.logback; +package com.alibaba.nacos.logger.adapter.logback12; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.joran.ReconfigureOnChangeTask; import ch.qos.logback.classic.spi.LoggerContextListener; import ch.qos.logback.core.CoreConstants; -import com.alibaba.nacos.client.logging.NacosLoggingProperties; +import com.alibaba.nacos.common.logging.NacosLoggingProperties; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -35,6 +33,7 @@ import org.slf4j.LoggerFactory; import org.slf4j.impl.StaticLoggerBinder; import java.lang.reflect.Field; +import java.util.Properties; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -68,7 +67,7 @@ public class LogbackNacosLoggingAdapterTest { loggerContext.addListener(loggerContextListener); setLoggerFactory(loggerContext); } - loggingProperties = new NacosLoggingProperties("classpath:nacos-logback.xml"); + loggingProperties = new NacosLoggingProperties("classpath:nacos-logback12.xml", new Properties()); } @After @@ -125,12 +124,13 @@ public class LogbackNacosLoggingAdapterTest { @Test public void testIsAdaptedLogger() { assertTrue(logbackNacosLoggingAdapter.isAdaptedLogger(Logger.class)); - assertFalse(logbackNacosLoggingAdapter.isAdaptedLogger(org.apache.logging.log4j.core.Logger.class)); + assertFalse(logbackNacosLoggingAdapter.isAdaptedLogger(java.util.logging.Logger.class)); } @Test(expected = IllegalStateException.class) public void testLoadConfigurationFailure() { System.setProperty("nacos.logging.config", "http://localhost"); + loggingProperties = new NacosLoggingProperties("classpath:nacos-logback12.xml", System.getProperties()); logbackNacosLoggingAdapter.loadConfiguration(loggingProperties); } @@ -141,7 +141,7 @@ public class LogbackNacosLoggingAdapterTest { @Test public void testGetDefaultConfigLocation() { - assertEquals("classpath:nacos-logback.xml", logbackNacosLoggingAdapter.getDefaultConfigLocation()); + assertEquals("classpath:nacos-logback12.xml", logbackNacosLoggingAdapter.getDefaultConfigLocation()); } @Test diff --git a/client/src/test/java/com/alibaba/nacos/client/logging/logback/NacosClientPropertyActionTest.java b/logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12/NacosClientPropertyActionTest.java similarity index 89% rename from client/src/test/java/com/alibaba/nacos/client/logging/logback/NacosClientPropertyActionTest.java rename to logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12/NacosClientPropertyActionTest.java index 22d5c29ef..597027ca7 100644 --- a/client/src/test/java/com/alibaba/nacos/client/logging/logback/NacosClientPropertyActionTest.java +++ b/logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12/NacosClientPropertyActionTest.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2022 Alibaba Group Holding Ltd. + * Copyright 1999-2023 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,14 @@ * limitations under the License. */ -package com.alibaba.nacos.client.logging.logback; +package com.alibaba.nacos.logger.adapter.logback12; import ch.qos.logback.core.ContextBase; import ch.qos.logback.core.joran.spi.ActionException; import ch.qos.logback.core.joran.spi.InterpretationContext; import ch.qos.logback.core.status.ErrorStatus; import ch.qos.logback.core.status.Status; -import com.alibaba.nacos.client.env.NacosClientProperties; +import com.alibaba.nacos.common.logging.NacosLoggingProperties; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -29,6 +29,7 @@ import org.mockito.Mockito; import org.xml.sax.Attributes; import java.util.List; +import java.util.Properties; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -37,9 +38,15 @@ public class NacosClientPropertyActionTest { ContextBase context; + private NacosLoggingProperties loggingProperties; + + private Properties properties; + @Before public void setUp() throws Exception { context = new ContextBase(); + properties = new Properties(); + loggingProperties = new NacosLoggingProperties("classpath:test.xml", properties); } @After @@ -50,7 +57,7 @@ public class NacosClientPropertyActionTest { @Test public void testLookUpVar() throws ActionException { - NacosClientProperties.PROTOTYPE.setProperty("test.nacos.logging.action.lookup", "true"); + properties.setProperty("test.nacos.logging.action.lookup", "true"); final InterpretationContext interpretationContext = new InterpretationContext(context, null); @@ -60,7 +67,7 @@ public class NacosClientPropertyActionTest { Mockito.when(mockAttr.getValue(Mockito.eq("scope"))).thenReturn("context"); Mockito.when(mockAttr.getValue(Mockito.eq("defaultValue"))).thenReturn("/root"); - NacosClientPropertyAction nacosClientPropertyAction = new NacosClientPropertyAction(); + NacosClientPropertyAction nacosClientPropertyAction = new NacosClientPropertyAction(loggingProperties); nacosClientPropertyAction.setContext(context); nacosClientPropertyAction.begin(interpretationContext, "nacosClientProperty", mockAttr); @@ -78,7 +85,7 @@ public class NacosClientPropertyActionTest { Mockito.when(mockAttr.getValue(Mockito.eq("source"))).thenReturn("test.nacos.logging.action.lookup"); Mockito.when(mockAttr.getValue(Mockito.eq("scope"))).thenReturn("context"); Mockito.when(mockAttr.getValue(Mockito.eq("defaultValue"))).thenReturn("/root"); - NacosClientPropertyAction nacosClientPropertyAction = new NacosClientPropertyAction(); + NacosClientPropertyAction nacosClientPropertyAction = new NacosClientPropertyAction(loggingProperties); nacosClientPropertyAction.setContext(context); nacosClientPropertyAction.begin(interpretationContext, "nacosClientProperty", mockAttr); List statusList = context.getStatusManager().getCopyOfStatusList(); diff --git a/client/src/test/java/com/alibaba/nacos/client/logging/logback/NacosLogbackConfiguratorAdapterV1Test.java b/logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12/NacosLogbackConfiguratorAdapterV1Test.java similarity index 98% rename from client/src/test/java/com/alibaba/nacos/client/logging/logback/NacosLogbackConfiguratorAdapterV1Test.java rename to logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12/NacosLogbackConfiguratorAdapterV1Test.java index cd1aed03d..ef9df73b0 100644 --- a/client/src/test/java/com/alibaba/nacos/client/logging/logback/NacosLogbackConfiguratorAdapterV1Test.java +++ b/logger-adapter-impl/logback-adapter-12/src/test/java/com/alibaba/nacos/logger/adapter/logback12/NacosLogbackConfiguratorAdapterV1Test.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.alibaba.nacos.client.logging.logback; +package com.alibaba.nacos.logger.adapter.logback12; import ch.qos.logback.core.ContextBase; import ch.qos.logback.core.joran.spi.JoranException; diff --git a/logger-adapter-impl/pom.xml b/logger-adapter-impl/pom.xml new file mode 100644 index 000000000..6f5222ad5 --- /dev/null +++ b/logger-adapter-impl/pom.xml @@ -0,0 +1,97 @@ + + + + + + nacos-all + com.alibaba.nacos + ${revision} + + 4.0.0 + + nacos-logger-adapter-impl + pom + nacos-logger-adapter-impl ${project.version} + https://nacos.io + + logback-adapter-12 + log4j2-adapter + + + + + com.alibaba.nacos + nacos-common + + + + + + release-sign-artifacts + + + + maven-shade-plugin + + + maven-jar-plugin + + + pure-jar + package + + jar + + + pure + + + + + + + + + release-nacos + + + + maven-shade-plugin + + + maven-jar-plugin + + + pure-jar + package + + jar + + + pure + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9066f7319..0fe10389a 100644 --- a/pom.xml +++ b/pom.xml @@ -616,6 +616,7 @@ plugin-default-impl prometheus persistence + logger-adapter-impl