This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new a7ced36999 optimize AccessLogFilter (#10488)
a7ced36999 is described below
commit a7ced3699964b42d87286a2aa8aa2b05715ce863
Author: FUNKYE <[email protected]>
AuthorDate: Mon Aug 22 16:08:38 2022 +0800
optimize AccessLogFilter (#10488)
---
.../apache/dubbo/rpc/filter/AccessLogFilter.java | 20 +++++++++++++++-----
.../apache/dubbo/rpc/support/AccessLogData.java | 22 ++++++++++++++++++++--
2 files changed, 35 insertions(+), 7 deletions(-)
diff --git
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/AccessLogFilter.java
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/AccessLogFilter.java
index 8826c3708d..283b993417 100644
---
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/AccessLogFilter.java
+++
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/AccessLogFilter.java
@@ -21,6 +21,7 @@ import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.threadpool.manager.FrameworkExecutorRepository;
import org.apache.dubbo.common.utils.ConfigUtils;
+import org.apache.dubbo.rpc.Constants;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
@@ -35,6 +36,7 @@ import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
+import java.util.Optional;
import java.util.Queue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
@@ -102,17 +104,25 @@ public class AccessLogFilter implements Filter {
.getBean(FrameworkExecutorRepository.class).getSharedScheduledExecutor()
.scheduleWithFixedDelay(this::writeLogToFile,
LOG_OUTPUT_INTERVAL, LOG_OUTPUT_INTERVAL, TimeUnit.MILLISECONDS);
}
+ Optional<AccessLogData> optionalAccessLogData = Optional.empty();
+ String accessLogKey = null;
try {
- String accessLogKey =
invoker.getUrl().getParameter(ACCESS_LOG_KEY);
+ accessLogKey =
invoker.getUrl().getParameter(Constants.ACCESS_LOG_KEY);
if (ConfigUtils.isNotEmpty(accessLogKey)) {
- AccessLogData logData = AccessLogData.newLogData();
- logData.buildAccessLogData(invoker, inv);
- log(accessLogKey, logData);
+ optionalAccessLogData =
Optional.of(buildAccessLogData(invoker, inv));
}
} catch (Throwable t) {
logger.warn("Exception in AccessLogFilter of service(" + invoker +
" -> " + inv + ")", t);
}
- return invoker.invoke(inv);
+ try {
+ return invoker.invoke(inv);
+ } finally {
+ String finalAccessLogKey = accessLogKey;
+ optionalAccessLogData.ifPresent(logData -> {
+ logData.setOutTime(new Date());
+ log(finalAccessLogKey, logData);
+ });
+ }
}
private void log(String accessLog, AccessLogData accessLogData) {
diff --git
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/AccessLogData.java
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/AccessLogData.java
index 482932daf4..f231ae9a2e 100644
---
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/AccessLogData.java
+++
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/AccessLogData.java
@@ -38,13 +38,14 @@ import java.util.Map;
*/
public final class AccessLogData {
- private static final String MESSAGE_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
+ private static final String MESSAGE_DATE_FORMAT = "yyyy-MM-dd
HH:mm:ss.SSSSS";
private static final DateTimeFormatter MESSAGE_DATE_FORMATTER =
DateTimeFormatter.ofPattern(MESSAGE_DATE_FORMAT);
private static final String VERSION = "version";
private static final String GROUP = "group";
private static final String SERVICE = "service";
private static final String METHOD_NAME = "method-name";
private static final String INVOCATION_TIME = "invocation-time";
+ private static final String OUT_TIME = "out-time";
private static final String TYPES = "types";
private static final String ARGUMENTS = "arguments";
private static final String REMOTE_HOST = "remote-host";
@@ -115,6 +116,15 @@ public final class AccessLogData {
set(INVOCATION_TIME, invocationTime);
}
+ /**
+ * Set the out date. As an argument it accept date string.
+ *
+ * @param outTime
+ */
+ public void setOutTime(Date outTime) {
+ set(OUT_TIME, outTime);
+ }
+
/**
* Set caller remote host
*
@@ -191,9 +201,13 @@ public final class AccessLogData {
public String getLogMessage() {
StringBuilder sn = new StringBuilder();
- sn.append('[')
+ sn.append("[")
.append(LocalDateTime.ofInstant(getInvocationTime().toInstant(),
ZoneId.systemDefault()).format(MESSAGE_DATE_FORMATTER))
.append("] ")
+ .append("-> ")
+ .append("[")
+ .append(LocalDateTime.ofInstant(getOutTime().toInstant(),
ZoneId.systemDefault()).format(MESSAGE_DATE_FORMATTER))
+ .append("] ")
.append(get(REMOTE_HOST))
.append(':')
.append(get(REMOTE_PORT))
@@ -244,6 +258,10 @@ public final class AccessLogData {
return (Date) get(INVOCATION_TIME);
}
+ private Date getOutTime() {
+ return (Date)get(OUT_TIME);
+ }
+
/**
* Return value of key
*