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
      *

Reply via email to