From 22fab2bd82129ef17b1ea2b8121536eae3a2da2c Mon Sep 17 00:00:00 2001 From: wenxuan70 Date: Fri, 22 Sep 2023 09:42:54 +0800 Subject: [PATCH] feat: support log path configuration parameters (#1130) --- CHANGELOG.md | 1 + .../PolarisLoggingApplicationListener.java | 19 ++++++++ ...itional-spring-configuration-metadata.json | 6 +++ .../PolarisLoggingPathPropertyTest.java | 43 ++++++++++++++++++ .../PolarisLoggingPathSystemPropertyTest.java | 44 +++++++++++++++++++ .../src/test/resources/bootstrap.yml | 2 + 6 files changed, 115 insertions(+) create mode 100644 spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/logging/PolarisLoggingPathPropertyTest.java create mode 100644 spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/logging/PolarisLoggingPathSystemPropertyTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 465d2199f..330def12f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,3 +4,4 @@ - [fix:the polaris config relation non-daemon thread should stop when application fails to start.](https://github.com/Tencent/spring-cloud-tencent/pull/1101) - [Refactoring:remove invalid @AutoConfigureAfter and @AutoConfigureBefore from discovery client automatic configuration.](https://github.com/Tencent/spring-cloud-tencent/pull/1117) - [fix:fix feign url bug when using sleuth.](https://github.com/Tencent/spring-cloud-tencent/pull/1121) +- [feat: support log path configuration parameters.](https://github.com/Tencent/spring-cloud-tencent/pull/1130) \ No newline at end of file diff --git a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/logging/PolarisLoggingApplicationListener.java b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/logging/PolarisLoggingApplicationListener.java index a75087ec7..d01ef8a7f 100644 --- a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/logging/PolarisLoggingApplicationListener.java +++ b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/logging/PolarisLoggingApplicationListener.java @@ -16,6 +16,8 @@ */ package com.tencent.cloud.polaris.context.logging; +import com.tencent.polaris.api.utils.StringUtils; +import com.tencent.polaris.logging.LoggingConsts; import com.tencent.polaris.logging.PolarisLogging; import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; @@ -24,6 +26,7 @@ import org.springframework.boot.context.logging.LoggingApplicationListener; import org.springframework.context.ApplicationEvent; import org.springframework.context.event.GenericApplicationListener; import org.springframework.core.ResolvableType; +import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.lang.NonNull; /** @@ -52,6 +55,22 @@ public class PolarisLoggingApplicationListener implements GenericApplicationList @Override public void onApplicationEvent(@NonNull ApplicationEvent applicationEvent) { + ConfigurableEnvironment environment = null; + + if (ApplicationEnvironmentPreparedEvent.class.isAssignableFrom(applicationEvent.getClass())) { + environment = ((ApplicationEnvironmentPreparedEvent) applicationEvent).getEnvironment(); + } + else if (ApplicationFailedEvent.class.isAssignableFrom(applicationEvent.getClass())) { + environment = ((ApplicationFailedEvent) applicationEvent).getApplicationContext().getEnvironment(); + } + + if (environment != null) { + String loggingPath = environment.getProperty("spring.cloud.polaris.logging.path"); + if (StringUtils.isNotBlank(loggingPath)) { + System.setProperty(LoggingConsts.LOGGING_PATH_PROPERTY, loggingPath); + } + } + PolarisLogging.getInstance().loadConfiguration(); } } diff --git a/spring-cloud-tencent-polaris-context/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-tencent-polaris-context/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 5c0ddb2da..f3244d1fd 100644 --- a/spring-cloud-tencent-polaris-context/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-tencent-polaris-context/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -45,6 +45,12 @@ "type": "java.lang.Integer", "defaultValue": "", "description": "current server local port to be registered." + }, + { + "name": "spring.cloud.polaris.logging.path", + "type": "java.lang.String", + "defaultValue": "./polaris/logs", + "description": "polaris log storage path." } ], "hints": [] diff --git a/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/logging/PolarisLoggingPathPropertyTest.java b/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/logging/PolarisLoggingPathPropertyTest.java new file mode 100644 index 000000000..c936f1e42 --- /dev/null +++ b/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/logging/PolarisLoggingPathPropertyTest.java @@ -0,0 +1,43 @@ +/* + * Tencent is pleased to support the open source community by making Spring Cloud Tencent available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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.tencent.cloud.polaris.context.logging; + +import org.junit.jupiter.api.Test; + +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Test to get spring.cloud.polaris.logging.path from environment. + * + * @author wenxuan70 + */ +public class PolarisLoggingPathPropertyTest { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withPropertyValues("spring.cloud.polaris.logging.path=/tmp/polaris/logs"); + + @Test + public void testGetPropertyFromEnvironment() { + contextRunner.run(context -> { + String loggingPath = context.getEnvironment().getProperty("spring.cloud.polaris.logging.path"); + assertThat(loggingPath).isEqualTo("/tmp/polaris/logs"); + }); + } +} diff --git a/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/logging/PolarisLoggingPathSystemPropertyTest.java b/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/logging/PolarisLoggingPathSystemPropertyTest.java new file mode 100644 index 000000000..039c5c661 --- /dev/null +++ b/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/logging/PolarisLoggingPathSystemPropertyTest.java @@ -0,0 +1,44 @@ +/* + * Tencent is pleased to support the open source community by making Spring Cloud Tencent available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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.tencent.cloud.polaris.context.logging; + +import com.tencent.cloud.polaris.context.PolarisContextApplication; +import com.tencent.polaris.logging.LoggingConsts; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Test for {@link PolarisLoggingApplicationListener} + * + * @author wenxuan70 + */ +@ExtendWith(SpringExtension.class) +@SpringBootTest(classes = PolarisContextApplication.class, + properties = {"spring.config.location=classpath:bootstrap.yml"}) +public class PolarisLoggingPathSystemPropertyTest { + + @Test + public void testSystemProperty() { + assertThat(System.getProperty(LoggingConsts.LOGGING_PATH_PROPERTY)).isEqualTo("/tmp/polaris/logs"); + } +} diff --git a/spring-cloud-tencent-polaris-context/src/test/resources/bootstrap.yml b/spring-cloud-tencent-polaris-context/src/test/resources/bootstrap.yml index c445dd227..3339e6934 100644 --- a/spring-cloud-tencent-polaris-context/src/test/resources/bootstrap.yml +++ b/spring-cloud-tencent-polaris-context/src/test/resources/bootstrap.yml @@ -7,3 +7,5 @@ spring: service: TestApp enabled: true local-port: 9090 + logging: + path: /tmp/polaris/logs \ No newline at end of file