You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2022/05/07 06:46:28 UTC

[dubbo] branch master updated: Fix The first element of the queue cannot be deleted when an exception occurs in the method processWithAccessKeyLogger(#9978)

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

liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new c5c1bad8d3 Fix The first element of the queue cannot be deleted when an exception occurs in the method processWithAccessKeyLogger(#9978)
c5c1bad8d3 is described below

commit c5c1bad8d399df2f0080a264b99908841ec3190d
Author: juzimao <57...@qq.com>
AuthorDate: Sat May 7 14:46:18 2022 +0800

    Fix The first element of the queue cannot be deleted when an exception occurs in the method processWithAccessKeyLogger(#9978)
    
    Fixes issue #9953
---
 .../org/apache/dubbo/rpc/filter/AccessLogFilter.java   | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 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 ea836e199d..434660bb3c 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
@@ -34,7 +34,6 @@ import java.io.IOException;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentHashMap;
@@ -156,22 +155,21 @@ public class AccessLogFilter implements Filter {
     }
 
     private void processWithAccessKeyLogger(Queue<AccessLogData> logQueue, File file) throws IOException {
-        try (FileWriter writer = new FileWriter(file, true)) {
-            for (Iterator<AccessLogData> iterator = logQueue.iterator();
-                 iterator.hasNext();
-                 iterator.remove()) {
-                writer.write(iterator.next().getLogMessage());
+        FileWriter writer = new FileWriter(file, true);
+        try  {
+            while (!logQueue.isEmpty()) {
+                writer.write(logQueue.poll().getLogMessage());
                 writer.write(System.getProperty(LINE_SEPARATOR));
             }
+        }finally {
             writer.flush();
+            writer.close();
         }
     }
 
     private void processWithServiceLogger(Queue<AccessLogData> logQueue) {
-        for (Iterator<AccessLogData> iterator = logQueue.iterator();
-             iterator.hasNext();
-             iterator.remove()) {
-            AccessLogData logData = iterator.next();
+        while (!logQueue.isEmpty()) {
+            AccessLogData logData = logQueue.poll();
             LoggerFactory.getLogger(LOG_KEY + "." + logData.getServiceName()).info(logData.getLogMessage());
         }
     }