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 <[email protected]> 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 "[email protected]" <[email protected]>.
