You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2017/12/22 12:28:20 UTC

[incubator-servicecomb-java-chassis] 03/09: [JAV-589] fix unit test failure, add README.md

This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git

commit 0eebf9924043ed7a49ef8232e0ab495fd3b8e57b
Author: yaohaishi <ya...@huawei.com>
AuthorDate: Sat Dec 16 10:52:47 2017 +0800

    [JAV-589] fix unit test failure, add README.md
---
 .../transport/rest/vertx/accesslog/README.md       | 56 ++++++++++++++++++++++
 .../element/impl/FirstLineOfRequestElement.java    | 10 ++--
 .../vertx/accesslog/impl/AccessLogHandlerImpl.java |  4 +-
 .../matcher/impl/DatetimeConfigurableMatcher.java  |  4 +-
 .../main/resources/config/base/log4j.properties    |  2 +-
 .../impl/FirstLineOfRequestElementTest.java        |  3 +-
 .../accesslog/impl/AccessLogHandlerImplTest.java   | 22 ++++++---
 7 files changed, 83 insertions(+), 18 deletions(-)

diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/README.md b/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/README.md
new file mode 100644
index 0000000..840ea59
--- /dev/null
+++ b/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/README.md
@@ -0,0 +1,56 @@
+# transport-rest-vertx Access Log
+
+## Enable access log printing
+
+To enable access log printing, you can config access log in microservice.yaml like below:
+```yaml
+cse:
+  accesslog:
+    enabled: true
+    pattern: "%h - - %t %r !! %q cs-uri %% %s %B"
+```
+
+***Access Log Configurations in microservice.yaml***
+
+| Config Item | Range of Value | Default Value | Meaning |
+| :---------- | :------------- | :------------ | :------ |
+| cse.accesslog.enabled | true/false | false | print access log if true |
+| cse.accesslog.pattern | a string field representing log pattern | "%h - - %t %r %s %B" | see details of ***Currently Supported Elements*** below |
+
+> ***Caution:***
+> - all of the configuration item above can be omitted, in this case, default value will take effect.
+
+## Supported log elements
+
+***Currently Supported Elements***
+
+| Element | Apache | W3C | Comment |
+| ----|------|------------| --------|
+| Method | %m  | cs-method | |
+| Status | %s  | sc-status | |
+| Duration s | %T  | - |  |
+| Duration ms | %D  | - | |
+| Remote Host | %h  | - |  |
+| Local Host | %v  | - |  |
+| Local port | %p  | - |  |
+| Bytes Written v1 | %B | - | Zero Bytes written as 0 |
+| Bytes Written v2 | %b | - | Zero Bytes written as - |
+| First line of request | %r  | - | |
+| URI path only | %U | cs-uri-stem | |
+| Query only | %q | cs-uri-query | |
+| URI path incl query | - | cs-uri | |
+| Version / Protocol | %H | - | |
+| Datetime Apache | %t | - | Logs by default the request timestamp using format 'EEE, dd MMM yyyy HH:mm:ss zzz', Locale English and Timezone GMT  |
+| Datetime Apache Configurable v1 | %{PATTERN}t | - | Specify the format pattern, by default it is used Locale English and Timezone GMT |
+| Datetime Apache Configurable v2 | %{PATTERN\|TIMEZONE\|LOCALE}t | - | Specify format pattern, timezone and locale |
+| Incoming Headers | %{IDENTIFIER}i  | - | If not found - will be logged |
+| Outgoing Response Headers | %{IDENTIFIER}o  | - | If not found - will be logged |
+| Cookie | %{IDENTIFIER}c  | - | If not found - will be logged |
+
+## Access log file settings
+
+Default access log configurations is in `config/base/log4j.properties`.
+
+Access log will be written in a separate log file named `cse.access.log` located in the same directory with common logs.
+
+Users can override access log file configuration as the same way of common logs.
\ No newline at end of file
diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/FirstLineOfRequestElement.java b/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/FirstLineOfRequestElement.java
index 6633817..6aa63e2 100644
--- a/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/FirstLineOfRequestElement.java
+++ b/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/FirstLineOfRequestElement.java
@@ -12,12 +12,14 @@ public class FirstLineOfRequestElement implements AccessLogElement {
 
   @Override
   public String getFormattedElement(AccessLogParam accessLogParam) {
-    StringBuilder result = new StringBuilder()
+    StringBuilder result = new StringBuilder(64)
+        .append("\"")
         .append(METHOD_ELEMENT.getFormattedElement(accessLogParam))
-        .append(" \"")
+        .append(" ")
         .append(URI_PATH_ONLY_ELEMENT.getFormattedElement(accessLogParam))
-        .append("\" ")
-        .append(VERSION_OR_PROTOCOL_ELEMENT.getFormattedElement(accessLogParam));
+        .append(" ")
+        .append(VERSION_OR_PROTOCOL_ELEMENT.getFormattedElement(accessLogParam))
+        .append("\"");
 
     return result.toString();
   }
diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/impl/AccessLogHandlerImpl.java b/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/impl/AccessLogHandlerImpl.java
index daba806..560dcc5 100644
--- a/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/impl/AccessLogHandlerImpl.java
+++ b/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/impl/AccessLogHandlerImpl.java
@@ -17,8 +17,8 @@ public class AccessLogHandlerImpl implements AccessLogHandler {
 
   private static AccessLogElement[] accessLogElements;
 
-  public AccessLogHandlerImpl(String rowLogPattern, AccessLogPatternParser accessLogPatternParser) {
-    List<AccessLogElementExtraction> extractionList = accessLogPatternParser.parsePattern(rowLogPattern);
+  public AccessLogHandlerImpl(String rawPattern, AccessLogPatternParser accessLogPatternParser) {
+    List<AccessLogElementExtraction> extractionList = accessLogPatternParser.parsePattern(rawPattern);
 
     accessLogElements = new AccessLogElement[extractionList.size()];
     for (int i = 0; i < extractionList.size(); ++i) {
diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/parser/matcher/impl/DatetimeConfigurableMatcher.java b/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/parser/matcher/impl/DatetimeConfigurableMatcher.java
index 8279643..e281f9f 100644
--- a/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/parser/matcher/impl/DatetimeConfigurableMatcher.java
+++ b/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/parser/matcher/impl/DatetimeConfigurableMatcher.java
@@ -6,8 +6,8 @@ import io.servicecomb.transport.rest.vertx.accesslog.element.impl.DatetimeConfig
 /**
  * Compatible with two kinds of configurable datetime placeholder:
  * <ul>
- *   <li>%{PATTERN}t</li>
- *   <li>%{PATTERN|TIMEZONE|LOCALE}t</li>
+ *   <li>v1: %{PATTERN}t</li>
+ *   <li>v2: %{PATTERN|TIMEZONE|LOCALE}t</li>
  * </ul>
  */
 public class DatetimeConfigurableMatcher extends ConfigurableAccessLogElementMatcher {
diff --git a/transports/transport-rest/transport-rest-vertx/src/main/resources/config/base/log4j.properties b/transports/transport-rest/transport-rest-vertx/src/main/resources/config/base/log4j.properties
index cbade69..efdaf63 100644
--- a/transports/transport-rest/transport-rest-vertx/src/main/resources/config/base/log4j.properties
+++ b/transports/transport-rest/transport-rest-vertx/src/main/resources/config/base/log4j.properties
@@ -8,6 +8,6 @@ log4j.appender.access.MaxBackupIndex=10
 log4j.appender.access.MaxFileSize=20MB
 log4j.appender.access.file=${paas.logs.accesslog.dir}${paas.logs.accesslog.file}
 log4j.appender.access.layout=org.apache.log4j.PatternLayout
-log4j.appender.access.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss,SSS/zzz}] %m%n
+log4j.appender.access.layout.ConversionPattern=%m%n
 log4j.appender.access.logPermission=rw-------
 log4j.additivity.accesslog=false
diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/FirstLineOfRequestElementTest.java b/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/FirstLineOfRequestElementTest.java
index 3626b24..964e588 100644
--- a/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/FirstLineOfRequestElementTest.java
+++ b/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/FirstLineOfRequestElementTest.java
@@ -1,7 +1,6 @@
 package io.servicecomb.transport.rest.vertx.accesslog.element.impl;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -31,6 +30,6 @@ public class FirstLineOfRequestElementTest {
 
     String result = ELEMENT.getFormattedElement(param);
 
-    assertEquals("DELETE \"" + uri + "\" HTTP/1.1", result);
+    assertEquals("\"DELETE " + uri + " HTTP/1.1\"", result);
   }
 }
\ No newline at end of file
diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/impl/AccessLogHandlerImplTest.java b/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/impl/AccessLogHandlerImplTest.java
index 19a0bbc..6847d2e 100644
--- a/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/impl/AccessLogHandlerImplTest.java
+++ b/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/impl/AccessLogHandlerImplTest.java
@@ -2,7 +2,9 @@ package io.servicecomb.transport.rest.vertx.accesslog.impl;
 
 import static org.junit.Assert.assertEquals;
 
+import java.text.SimpleDateFormat;
 import java.util.Arrays;
+import java.util.TimeZone;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -22,15 +24,16 @@ import mockit.Deencapsulation;
 
 public class AccessLogHandlerImplTest {
 
-  public static final AccessLogElement methodElement = new MethodElement();
+  private static final AccessLogElement methodElement = new MethodElement();
 
-  public static final AccessLogElement datetimeElement = new DatetimeConfigurableElement();
+  private static final AccessLogElement datetimeElement = new DatetimeConfigurableElement();
 
-  public static final AccessLogElement plainTextElement = new PlainTextElement(" - ");
+  private static final AccessLogElement plainTextElement = new PlainTextElement(" - ");
 
-  public static final Logger logger = Mockito.mock(Logger.class);
+  private static final Logger logger = Mockito.mock(Logger.class);
 
-  private static final AccessLogHandlerImpl accessLogHandlerImpl = new AccessLogHandlerImpl("", s -> {
+  private static final AccessLogHandlerImpl accessLogHandlerImpl = new AccessLogHandlerImpl("rawPattern", s -> {
+    assertEquals("rawPattern", s);
     return Arrays.asList(new AccessLogElementExtraction().setAccessLogElement(methodElement),
         new AccessLogElementExtraction().setAccessLogElement(plainTextElement),
         new AccessLogElementExtraction().setAccessLogElement(datetimeElement));
@@ -60,13 +63,18 @@ public class AccessLogHandlerImplTest {
   public void testLog() {
     RoutingContext context = Mockito.mock(RoutingContext.class);
     HttpServerRequest request = Mockito.mock(HttpServerRequest.class);
-    AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(1416863450581L).setRoutingContext(context);
+    long startMillisecond = 1416863450581L;
+    AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(startMillisecond)
+        .setRoutingContext(context);
+    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DatetimeConfigurableElement.DEFAULT_DATETIME_PATTERN,
+        DatetimeConfigurableElement.DEFAULT_LOCALE);
+    simpleDateFormat.setTimeZone(TimeZone.getDefault());
 
     Mockito.when(context.request()).thenReturn(request);
     Mockito.when(request.method()).thenReturn(HttpMethod.DELETE);
 
     Deencapsulation.invoke(accessLogHandlerImpl, "log", accessLogParam);
 
-    Mockito.verify(logger).info("DELETE" + " - " + "Tue, 25 Nov 2014 05:10:50 CST");
+    Mockito.verify(logger).info("DELETE" + " - " + simpleDateFormat.format(startMillisecond));
   }
 }
\ No newline at end of file

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