This is an automated email from the ASF dual-hosted git repository. liubao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit ca575d778a210bf00de89f3d9619e631d0ad85f3 Author: zhengyangyong <[email protected]> AuthorDate: Wed Dec 27 17:18:54 2017 +0800 SCB-85 add file config module Signed-off-by: zhengyangyong <[email protected]> --- .../pom.xml | 8 ++- .../config/log4j2/Log4j2FileWriterManager.java | 82 ++++++++++++++++++++++ .../pom.xml | 2 +- .../writefile/config/FileWriterManager.java} | 24 +------ .../log4j2config/Log4j2ConfigInitializer.java | 62 ---------------- metrics/metrics-sample/metrics-write-file/pom.xml | 6 ++ .../sample/writefile/MetricsFileOutput.java | 20 ++++-- metrics/metrics-sample/pom.xml | 14 +++- 8 files changed, 125 insertions(+), 93 deletions(-) diff --git a/metrics/metrics-sample/metrics-write-file-log4j2-config/pom.xml b/metrics/metrics-sample/metrics-write-file-config-log4j2/pom.xml similarity index 88% rename from metrics/metrics-sample/metrics-write-file-log4j2-config/pom.xml rename to metrics/metrics-sample/metrics-write-file-config-log4j2/pom.xml index 4b8251d..6912de1 100644 --- a/metrics/metrics-sample/metrics-write-file-log4j2-config/pom.xml +++ b/metrics/metrics-sample/metrics-write-file-config-log4j2/pom.xml @@ -26,9 +26,15 @@ </parent> <modelVersion>4.0.0</modelVersion> - <artifactId>metrics-write-file-log4j2-config</artifactId> + <artifactId>metrics-write-file-config-log4j2</artifactId> <dependencies> + + <dependency> + <groupId>io.servicecomb</groupId> + <artifactId>metrics-write-file-config</artifactId> + </dependency> + <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> diff --git a/metrics/metrics-sample/metrics-write-file-config-log4j2/src/main/java/io/servicecomb/metrics/sample/writefile/config/log4j2/Log4j2FileWriterManager.java b/metrics/metrics-sample/metrics-write-file-config-log4j2/src/main/java/io/servicecomb/metrics/sample/writefile/config/log4j2/Log4j2FileWriterManager.java new file mode 100644 index 0000000..6908e25 --- /dev/null +++ b/metrics/metrics-sample/metrics-write-file-config-log4j2/src/main/java/io/servicecomb/metrics/sample/writefile/config/log4j2/Log4j2FileWriterManager.java @@ -0,0 +1,82 @@ +/* + * 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 io.servicecomb.metrics.sample.writefile.config.log4j2; + +import java.nio.file.Paths; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.appender.RollingFileAppender; +import org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy; +import org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.impl.Log4jLogEvent; +import org.apache.logging.log4j.core.layout.PatternLayout; +import org.apache.logging.log4j.message.SimpleMessage; +import org.springframework.stereotype.Component; + +import com.netflix.config.DynamicPropertyFactory; + +import io.servicecomb.metrics.sample.writefile.config.FileWriterManager; + +@Component +public class Log4j2FileWriterManager implements FileWriterManager { + private static final String METRICS_FILE_ROLLING_MAXFILECOUNT = "servicecomb.metrics.file.rolling.max_file_count"; + + private static final String METRICS_FILE_ROLLING_MAXFILESIZE = "servicecomb.metrics.file.rolling.max_file_size"; + + private static final String METRICS_FILE_ROOTPATH = "servicecomb.metrics.file.root_path"; + + private final Map<String, RollingFileAppender> fileAppenders = new ConcurrentHashMap<>(); + + private final int maxFileCount; + + private final String maxFileSize; + + private final String rootPath; + + public Log4j2FileWriterManager() { + maxFileCount = DynamicPropertyFactory.getInstance().getIntProperty(METRICS_FILE_ROLLING_MAXFILECOUNT, 10).get(); + maxFileSize = DynamicPropertyFactory.getInstance().getStringProperty(METRICS_FILE_ROLLING_MAXFILESIZE, "10MB").get(); + rootPath = DynamicPropertyFactory.getInstance().getStringProperty(METRICS_FILE_ROOTPATH, "target").get(); + } + + @Override + public void write(String loggerName, String filePerfix, String content) { + RollingFileAppender appender = fileAppenders.computeIfAbsent(loggerName, f -> initLogger(loggerName, filePerfix)); + appender.append(Log4jLogEvent.newBuilder().setMessage(new SimpleMessage(content)).build()); + } + + private RollingFileAppender initLogger(String loggerName, String filePerfix) { + String fileName = Paths.get(rootPath, filePerfix + loggerName + ".dat").toString(); + String filePattern = Paths.get(rootPath, filePerfix + loggerName + "-%i.dat").toString(); + + LoggerContext ctx = (LoggerContext) LogManager.getContext(false); + Configuration config = ctx.getConfiguration(); + return RollingFileAppender.newBuilder().withName(loggerName) + .withLayout(PatternLayout.newBuilder().withPattern(PatternLayout.DEFAULT_CONVERSION_PATTERN).build()) + .withFileName(fileName) + .withFilePattern(filePattern) + .withPolicy(SizeBasedTriggeringPolicy.createPolicy(maxFileSize)) + .withStrategy( + DefaultRolloverStrategy.createStrategy(String.valueOf(maxFileCount), null, null, null, null, false, config)) + .build(); + } +} diff --git a/metrics/metrics-sample/metrics-write-file/pom.xml b/metrics/metrics-sample/metrics-write-file-config/pom.xml similarity index 95% copy from metrics/metrics-sample/metrics-write-file/pom.xml copy to metrics/metrics-sample/metrics-write-file-config/pom.xml index 5152f8a..adf44c3 100644 --- a/metrics/metrics-sample/metrics-write-file/pom.xml +++ b/metrics/metrics-sample/metrics-write-file-config/pom.xml @@ -26,7 +26,7 @@ </parent> <modelVersion>4.0.0</modelVersion> - <artifactId>metrics-write-file</artifactId> + <artifactId>metrics-write-file-config</artifactId> </project> \ No newline at end of file diff --git a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsFileOutput.java b/metrics/metrics-sample/metrics-write-file-config/src/main/java/io/servicecomb/metrics/sample/writefile/config/FileWriterManager.java similarity index 55% copy from metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsFileOutput.java copy to metrics/metrics-sample/metrics-write-file-config/src/main/java/io/servicecomb/metrics/sample/writefile/config/FileWriterManager.java index d0c6cdd..13d2ce2 100644 --- a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsFileOutput.java +++ b/metrics/metrics-sample/metrics-write-file-config/src/main/java/io/servicecomb/metrics/sample/writefile/config/FileWriterManager.java @@ -15,26 +15,8 @@ * limitations under the License. */ -package io.servicecomb.metrics.sample.writefile; +package io.servicecomb.metrics.sample.writefile.config; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -@Component -public class MetricsFileOutput { - - private final Map<String, org.slf4j.Logger> allLoggers = new ConcurrentHashMap<>(); - - public MetricsFileOutput() { - } - - public void output(Map<String, String> metrics) { - for (String metricName : metrics.keySet()) { - org.slf4j.Logger logger = allLoggers.computeIfAbsent(metricName, l -> LoggerFactory.getLogger(metricName)); - logger.error(metrics.get(metricName)); - } - } +public interface FileWriterManager { + void write(String loggerName, String filePerfix, String content); } diff --git a/metrics/metrics-sample/metrics-write-file-log4j2-config/src/main/java/io/servicecomb/metrics/sample/writefile/log4j2config/Log4j2ConfigInitializer.java b/metrics/metrics-sample/metrics-write-file-log4j2-config/src/main/java/io/servicecomb/metrics/sample/writefile/log4j2config/Log4j2ConfigInitializer.java deleted file mode 100644 index d0bc961..0000000 --- a/metrics/metrics-sample/metrics-write-file-log4j2-config/src/main/java/io/servicecomb/metrics/sample/writefile/log4j2config/Log4j2ConfigInitializer.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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 io.servicecomb.metrics.sample.writefile.log4j2config; - -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.core.config.Configurator; -import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder; -import org.apache.logging.log4j.core.config.builder.api.ComponentBuilder; -import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder; -import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory; -import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder; -import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration; -import org.springframework.stereotype.Component; - -@Component -public class Log4j2ConfigInitializer { - - public Log4j2ConfigInitializer() { - ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder(); - - builder.setStatusLevel(Level.ERROR); - builder.setConfigurationName("MetricsConfig"); -// create a rolling file appender - LayoutComponentBuilder layoutBuilder = builder.newLayout("PatternLayout") - .addAttribute("pattern", "%m%n"); - ComponentBuilder triggeringPolicy = builder.newComponent("Policies") - .addComponent(builder.newComponent("CronTriggeringPolicy").addAttribute("schedule", "0 0 0 * * ?")) - .addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", "10MB")); - AppenderComponentBuilder appenderBuilder = builder.newAppender("rolling", "RollingFile") - .addAttribute("fileName", "target/rolling.log") - .addAttribute("filePattern", "target/archive/rolling-%d{MM-dd-yy}.log.gz") - .add(layoutBuilder) - .addComponent(triggeringPolicy); - builder.add(appenderBuilder); - -// create the new logger - builder.add(builder.newLogger("TestLogger", Level.DEBUG) - .add(builder.newAppenderRef("rolling")) - .addAttribute("additivity", false)); - - builder.add(builder.newRootLogger(Level.DEBUG) - .add(builder.newAppenderRef("rolling"))); - Configurator.initialize(builder.build()); - } - - -} diff --git a/metrics/metrics-sample/metrics-write-file/pom.xml b/metrics/metrics-sample/metrics-write-file/pom.xml index 5152f8a..7769bb5 100644 --- a/metrics/metrics-sample/metrics-write-file/pom.xml +++ b/metrics/metrics-sample/metrics-write-file/pom.xml @@ -28,5 +28,11 @@ <artifactId>metrics-write-file</artifactId> + <dependencies> + <dependency> + <groupId>io.servicecomb</groupId> + <artifactId>metrics-write-file-config</artifactId> + </dependency> + </dependencies> </project> \ No newline at end of file diff --git a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsFileOutput.java b/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsFileOutput.java index d0c6cdd..f77a1d1 100644 --- a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsFileOutput.java +++ b/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsFileOutput.java @@ -18,23 +18,31 @@ package io.servicecomb.metrics.sample.writefile; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import io.servicecomb.metrics.sample.writefile.config.FileWriterManager; +import io.servicecomb.serviceregistry.RegistryUtils; +import io.servicecomb.serviceregistry.api.registry.Microservice; + @Component public class MetricsFileOutput { - private final Map<String, org.slf4j.Logger> allLoggers = new ConcurrentHashMap<>(); + private final FileWriterManager fileWriterManager; + + private final String filePrefix; - public MetricsFileOutput() { + @Autowired + public MetricsFileOutput(FileWriterManager fileWriterManager) { + this.fileWriterManager = fileWriterManager; + Microservice microservice = RegistryUtils.getMicroservice(); + filePrefix = microservice.getAppId() + "." + microservice.getServiceName() + "."; } public void output(Map<String, String> metrics) { for (String metricName : metrics.keySet()) { - org.slf4j.Logger logger = allLoggers.computeIfAbsent(metricName, l -> LoggerFactory.getLogger(metricName)); - logger.error(metrics.get(metricName)); + fileWriterManager.write(metricName, filePrefix, metrics.get(metricName)); } } } diff --git a/metrics/metrics-sample/pom.xml b/metrics/metrics-sample/pom.xml index cbf5803..542b6d4 100644 --- a/metrics/metrics-sample/pom.xml +++ b/metrics/metrics-sample/pom.xml @@ -32,10 +32,20 @@ <modules> <module>metrics-performance-test</module> <module>metrics-write-file</module> - <module>metrics-write-file-log4j2-config</module> + <module>metrics-write-file-config</module> + <module>metrics-write-file-config-log4j2</module> </modules> - <!--add or move metrics-core for enable or disable--> + <dependencyManagement> + <dependencies> + <dependency> + <groupId>io.servicecomb</groupId> + <artifactId>metrics-write-file-config</artifactId> + <version>0.6.0-SNAPSHOT</version> + </dependency> + </dependencies> + </dependencyManagement> + <dependencies> <dependency> <groupId>io.servicecomb</groupId> -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
