You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2018/01/09 06:27:14 UTC

[incubator-servicecomb-java-chassis] 03/13: SCB-85 add log4j2 implement

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 a7a33d8d27c27fee0d12a1bf4ef6bf29950ad35e
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Thu Dec 28 11:25:16 2017 +0800

    SCB-85 add log4j2 implement
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../metrics-performance-test/pom.xml               | 28 ++++++++++++
 .../src/main/resources/microservice.yaml           | 15 +++++++
 .../config/log4j2/Log4j2FileWriterManager.java     | 51 ++++++++++++----------
 .../sample/writefile/config/FileWriterManager.java |  2 +-
 ...entConvertor.java => FileContentConvertor.java} |  2 +-
 ...entFormatter.java => FileContentFormatter.java} |  2 +-
 .../{MetricsFileOutput.java => FileWriter.java}    |  4 +-
 ...vertor.java => SimpleFileContentConvertor.java} |  9 ++--
 ...matter.java => SimpleFileContentFormatter.java} | 11 ++---
 ...rInitializer.java => WriteFileInitializer.java} | 12 ++---
 metrics/metrics-sample/pom.xml                     | 10 +++++
 samples/bmi/calculator/pom.xml                     | 20 +++++++++
 .../src/main/resources/microservice.yaml           |  7 ++-
 13 files changed, 129 insertions(+), 44 deletions(-)

diff --git a/metrics/metrics-sample/metrics-performance-test/pom.xml b/metrics/metrics-sample/metrics-performance-test/pom.xml
index f37e1fe..e12b18c 100644
--- a/metrics/metrics-sample/metrics-performance-test/pom.xml
+++ b/metrics/metrics-sample/metrics-performance-test/pom.xml
@@ -32,8 +32,19 @@
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>org.springframework.boot</groupId>
+          <artifactId>spring-boot-starter-logging</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-log4j2</artifactId>
+    </dependency>
+
+    <dependency>
       <groupId>io.servicecomb</groupId>
       <artifactId>spring-boot-starter-provider</artifactId>
     </dependency>
@@ -42,6 +53,23 @@
       <groupId>org.hibernate</groupId>
       <artifactId>hibernate-validator</artifactId>
     </dependency>
+
+    <dependency>
+      <groupId>io.servicecomb</groupId>
+      <artifactId>metrics-write-file-config</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.servicecomb</groupId>
+      <artifactId>metrics-write-file-config-log4j2</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.servicecomb</groupId>
+      <artifactId>metrics-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.servicecomb</groupId>
+      <artifactId>metrics-write-file</artifactId>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/metrics/metrics-sample/metrics-performance-test/src/main/resources/microservice.yaml b/metrics/metrics-sample/metrics-performance-test/src/main/resources/microservice.yaml
index b5edcd1..3a10562 100644
--- a/metrics/metrics-sample/metrics-performance-test/src/main/resources/microservice.yaml
+++ b/metrics/metrics-sample/metrics-performance-test/src/main/resources/microservice.yaml
@@ -30,6 +30,21 @@ cse:
 
 servicecomb:
   metrics:
+    #polltime,unit is second
+    polltime: 5
+    #metrics double value round places,default value is 1
+    round_places: 1
+    file:
+      enabled: false
+      #metrics file name prefix setting,default value is "metrics"
+      name_prefix: bmi.calculator
+
+      root_path: /sample/bmi/calculator/target/metric
+      rolling:
+        max_file_count: 10
+        max_file_size : 10MB
+
+    #Version 0.5.0+ config
     #Support Muti-WindowTime (MILLISECONDS) like 10000,60000 (10s and 60s), Use WindowTimeIndex make selection,start from 0
     #Default value is single WindowTime : 5000 (5 second)
     #Will direct set value of "servo.pollers"
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
index 6908e25..4c1eb07 100644
--- 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
@@ -38,11 +38,15 @@ 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_MAX_FILE_COUNT = "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_ROLLING_MAX_FILE_SIZE = "servicecomb.metrics.file.rolling.max_file_size";
 
-  private static final String METRICS_FILE_ROOTPATH = "servicecomb.metrics.file.root_path";
+  private static final String METRICS_FILE_ROOT_PATH = "servicecomb.metrics.file.root_path";
+
+  private final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+
+  private final Configuration config = ctx.getConfiguration();
 
   private final Map<String, RollingFileAppender> fileAppenders = new ConcurrentHashMap<>();
 
@@ -53,30 +57,31 @@ public class Log4j2FileWriterManager implements FileWriterManager {
   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();
+    maxFileCount = DynamicPropertyFactory.getInstance().getIntProperty(METRICS_FILE_ROLLING_MAX_FILE_COUNT, 10).get();
+    maxFileSize = DynamicPropertyFactory.getInstance().getStringProperty(METRICS_FILE_ROLLING_MAX_FILE_SIZE, "10MB")
+        .get();
+    rootPath = DynamicPropertyFactory.getInstance().getStringProperty(METRICS_FILE_ROOT_PATH, "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());
+  public void write(String loggerName, String filePrefix, String content) {
+    RollingFileAppender logger = fileAppenders.computeIfAbsent(loggerName, f -> initLogger(loggerName, filePrefix));
+    logger.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();
+  private RollingFileAppender initLogger(String loggerName, String filePrefix) {
+    String fileName = Paths.get(rootPath, filePrefix + loggerName + ".dat").toString();
+    String filePattern = Paths.get(rootPath, filePrefix + loggerName + "-%i.dat").toString();
+
+    PatternLayout layout = PatternLayout.newBuilder().withPattern(PatternLayout.DEFAULT_CONVERSION_PATTERN).build();
+    SizeBasedTriggeringPolicy policy = SizeBasedTriggeringPolicy.createPolicy(maxFileSize);
+    DefaultRolloverStrategy strategy = DefaultRolloverStrategy.createStrategy(String.valueOf(maxFileCount), null, null,
+        null, null, false, config);
+
+    //TODO:in version 2.8 + , log4j2 request use RollingFileAppender.newBuilder,but throw No such static method exception
+    RollingFileAppender appender = RollingFileAppender
+        .createAppender(fileName, filePattern, "true", loggerName, "true", null,
+            "true", policy, strategy, layout, null, null, null, null, config);
+    return appender;
   }
 }
diff --git a/metrics/metrics-sample/metrics-write-file-config/src/main/java/io/servicecomb/metrics/sample/writefile/config/FileWriterManager.java b/metrics/metrics-sample/metrics-write-file-config/src/main/java/io/servicecomb/metrics/sample/writefile/config/FileWriterManager.java
index 13d2ce2..3fde5f9 100644
--- a/metrics/metrics-sample/metrics-write-file-config/src/main/java/io/servicecomb/metrics/sample/writefile/config/FileWriterManager.java
+++ b/metrics/metrics-sample/metrics-write-file-config/src/main/java/io/servicecomb/metrics/sample/writefile/config/FileWriterManager.java
@@ -18,5 +18,5 @@
 package io.servicecomb.metrics.sample.writefile.config;
 
 public interface FileWriterManager {
-  void write(String loggerName, String filePerfix, String content);
+  void write(String loggerName, String filePrefix, String content);
 }
diff --git a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsContentConvertor.java b/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/FileContentConvertor.java
similarity index 95%
rename from metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsContentConvertor.java
rename to metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/FileContentConvertor.java
index 8496d64..6619327 100644
--- a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsContentConvertor.java
+++ b/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/FileContentConvertor.java
@@ -22,6 +22,6 @@ import java.util.Map;
 import io.servicecomb.metrics.common.RegistryMetric;
 
 //convert metrics to output content
-public interface MetricsContentConvertor {
+public interface FileContentConvertor {
   Map<String, String> convert(RegistryMetric registryMetric);
 }
diff --git a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsContentFormatter.java b/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/FileContentFormatter.java
similarity index 95%
rename from metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsContentFormatter.java
rename to metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/FileContentFormatter.java
index db1fb82..f06c3c8 100644
--- a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsContentFormatter.java
+++ b/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/FileContentFormatter.java
@@ -19,6 +19,6 @@ package io.servicecomb.metrics.sample.writefile;
 
 import java.util.Map;
 
-public interface MetricsContentFormatter {
+public interface FileContentFormatter {
   Map<String, String> format(Map<String, String> input);
 }
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/FileWriter.java
similarity index 94%
rename from metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsFileOutput.java
rename to metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/FileWriter.java
index f77a1d1..b3c47cd 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/FileWriter.java
@@ -27,14 +27,14 @@ import io.servicecomb.serviceregistry.RegistryUtils;
 import io.servicecomb.serviceregistry.api.registry.Microservice;
 
 @Component
-public class MetricsFileOutput {
+public class FileWriter {
 
   private final FileWriterManager fileWriterManager;
 
   private final String filePrefix;
 
   @Autowired
-  public MetricsFileOutput(FileWriterManager fileWriterManager) {
+  public FileWriter(FileWriterManager fileWriterManager) {
     this.fileWriterManager = fileWriterManager;
     Microservice microservice = RegistryUtils.getMicroservice();
     filePrefix = microservice.getAppId() + "." + microservice.getServiceName() + ".";
diff --git a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/SimpleMetricsContentConvertor.java b/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/SimpleFileContentConvertor.java
similarity index 82%
rename from metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/SimpleMetricsContentConvertor.java
rename to metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/SimpleFileContentConvertor.java
index 60bf180..b4eee11 100644
--- a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/SimpleMetricsContentConvertor.java
+++ b/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/SimpleFileContentConvertor.java
@@ -19,19 +19,20 @@ package io.servicecomb.metrics.sample.writefile;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import org.springframework.stereotype.Component;
 
 import io.servicecomb.metrics.common.RegistryMetric;
 
 @Component
-public class SimpleMetricsContentConvertor implements MetricsContentConvertor {
+public class SimpleFileContentConvertor implements FileContentConvertor {
   @Override
   public Map<String, String> convert(RegistryMetric registryMetric) {
     Map<String, String> pickedMetrics = new HashMap<>();
-
-    //TODO:draw all metrics from RegistryMetric
-
+    for (Entry<String,Number> metric : registryMetric.toMap().entrySet()) {
+      pickedMetrics.put(metric.getKey(),String.valueOf(metric.getValue()));
+    }
     return pickedMetrics;
   }
 }
diff --git a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/SimpleMetricsContentFormatter.java b/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/SimpleFileContentFormatter.java
similarity index 88%
rename from metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/SimpleMetricsContentFormatter.java
rename to metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/SimpleFileContentFormatter.java
index 1cdc203..809a2fb 100644
--- a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/SimpleMetricsContentFormatter.java
+++ b/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/SimpleFileContentFormatter.java
@@ -33,24 +33,25 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import io.servicecomb.foundation.common.net.NetUtils;
 import io.servicecomb.foundation.common.utils.JsonUtils;
 import io.servicecomb.serviceregistry.RegistryUtils;
+import io.servicecomb.serviceregistry.api.registry.Microservice;
 
 @Component
-public class SimpleMetricsContentFormatter implements MetricsContentFormatter {
-  private static final Logger logger = LoggerFactory.getLogger(SimpleMetricsContentFormatter.class);
+public class SimpleFileContentFormatter implements FileContentFormatter {
+  private static final Logger logger = LoggerFactory.getLogger(SimpleFileContentFormatter.class);
 
   private final String applicationName;
 
   private String hostName;
 
   @Autowired
-  public SimpleMetricsContentFormatter() {
+  public SimpleFileContentFormatter() {
     hostName = NetUtils.getHostName();
     if (StringUtils.isEmpty(hostName)) {
       hostName = NetUtils.getHostAddress();
     }
 
-    applicationName =
-        RegistryUtils.getMicroservice().getAppId() + "." + RegistryUtils.getMicroservice().getServiceName();
+    Microservice microservice = RegistryUtils.getMicroservice();
+    applicationName = microservice.getAppId() + "." + microservice.getServiceName();
   }
 
   @Override
diff --git a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsObserverInitializer.java b/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/WriteFileInitializer.java
similarity index 85%
rename from metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsObserverInitializer.java
rename to metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/WriteFileInitializer.java
index 051f2ee..a01a5d5 100644
--- a/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/MetricsObserverInitializer.java
+++ b/metrics/metrics-sample/metrics-write-file/src/main/java/io/servicecomb/metrics/sample/writefile/WriteFileInitializer.java
@@ -31,23 +31,23 @@ import io.servicecomb.metrics.common.RegistryMetric;
 import io.servicecomb.metrics.core.publish.DataSource;
 
 @Component
-public class MetricsObserverInitializer {
+public class WriteFileInitializer {
 
   private static final String METRICS_WINDOW_TIME = "servicecomb.metrics.window_time";
 
   private final int metricPoll;
 
-  private final MetricsFileOutput fileOutput;
+  private final FileWriter fileOutput;
 
-  private final MetricsContentConvertor convertor;
+  private final FileContentConvertor convertor;
 
-  private final MetricsContentFormatter formatter;
+  private final FileContentFormatter formatter;
 
   private final DataSource dataSource;
 
   @Autowired
-  public MetricsObserverInitializer(MetricsFileOutput fileOutput, MetricsContentConvertor convertor,
-      MetricsContentFormatter formatter, DataSource dataSource) {
+  public WriteFileInitializer(FileWriter fileOutput, FileContentConvertor convertor,
+      FileContentFormatter formatter, DataSource dataSource) {
     metricPoll = DynamicPropertyFactory.getInstance().getIntProperty(METRICS_WINDOW_TIME, 5000).get();
     this.fileOutput = fileOutput;
     this.convertor = convertor;
diff --git a/metrics/metrics-sample/pom.xml b/metrics/metrics-sample/pom.xml
index 542b6d4..845a570 100644
--- a/metrics/metrics-sample/pom.xml
+++ b/metrics/metrics-sample/pom.xml
@@ -43,6 +43,16 @@
         <artifactId>metrics-write-file-config</artifactId>
         <version>0.6.0-SNAPSHOT</version>
       </dependency>
+      <dependency>
+        <groupId>io.servicecomb</groupId>
+        <artifactId>metrics-write-file-config-log4j2</artifactId>
+        <version>0.6.0-SNAPSHOT</version>
+      </dependency>
+      <dependency>
+        <groupId>io.servicecomb</groupId>
+        <artifactId>metrics-write-file</artifactId>
+        <version>0.6.0-SNAPSHOT</version>
+      </dependency>
     </dependencies>
   </dependencyManagement>
 
diff --git a/samples/bmi/calculator/pom.xml b/samples/bmi/calculator/pom.xml
index ffd84f1..4378d46 100644
--- a/samples/bmi/calculator/pom.xml
+++ b/samples/bmi/calculator/pom.xml
@@ -61,6 +61,26 @@
       <groupId>io.servicecomb</groupId>
       <artifactId>handler-tracing-zipkin</artifactId>
     </dependency>
+
+    <dependency>
+      <groupId>io.servicecomb</groupId>
+      <artifactId>metrics-write-file-config</artifactId>
+      <version>0.6.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>io.servicecomb</groupId>
+      <artifactId>metrics-write-file-config-log4j2</artifactId>
+      <version>0.6.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>io.servicecomb</groupId>
+      <artifactId>metrics-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.servicecomb</groupId>
+      <artifactId>metrics-write-file</artifactId>
+      <version>0.6.0-SNAPSHOT</version>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/samples/bmi/calculator/src/main/resources/microservice.yaml b/samples/bmi/calculator/src/main/resources/microservice.yaml
index d27d2a7..e568b3d 100644
--- a/samples/bmi/calculator/src/main/resources/microservice.yaml
+++ b/samples/bmi/calculator/src/main/resources/microservice.yaml
@@ -40,10 +40,15 @@ servicecomb:
     #metrics double value round places,default value is 1
     round_places: 1
     file:
-      enabled: true
+      enabled: false
       #metrics file name prefix setting,default value is "metrics"
       name_prefix: bmi.calculator
 
+      root_path: ./samples/bmi/calculator/target/metric/
+      rolling:
+        max_file_count: 10
+        max_file_size : 10MB
+
     #Version 0.5.0+ config
     #Support Muti-WindowTime (MILLISECONDS) like 10000,60000 (10s and 60s), Use WindowTimeIndex make selection,start from 0
     #Default value is single WindowTime : 5000 (5 second)

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.