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]>.

Reply via email to