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 2019/12/11 12:38:54 UTC
[dubbo] branch master updated: Finish AccessLogFilter TODO (#5270)
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 938a466 Finish AccessLogFilter TODO (#5270)
938a466 is described below
commit 938a46641ce76df26a01d5f7543b474219c78240
Author: Tyrael <wa...@gmail.com>
AuthorDate: Wed Dec 11 20:38:40 2019 +0800
Finish AccessLogFilter TODO (#5270)
---
.../apache/dubbo/rpc/filter/AccessLogFilter.java | 48 ++++++++++++----------
1 file changed, 27 insertions(+), 21 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 f7fd91d..63de8c4 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
@@ -78,7 +78,7 @@ public class AccessLogFilter implements Filter {
// It's safe to declare it as singleton since it runs on single thread only
private static final DateFormat FILE_NAME_FORMATTER = new SimpleDateFormat(FILE_DATE_FORMAT);
- private static final Map<String, Set<AccessLogData>> LOG_ENTRIES = new ConcurrentHashMap<String, Set<AccessLogData>>();
+ private static final Map<String, Set<AccessLogData>> LOG_ENTRIES = new ConcurrentHashMap<>();
private static final ScheduledExecutorService LOG_SCHEDULED = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("Dubbo-Access-Log", true));
@@ -118,32 +118,38 @@ public class AccessLogFilter implements Filter {
if (logSet.size() < LOG_MAX_BUFFER) {
logSet.add(accessLogData);
} else {
- //TODO we needs use force writing to file so that buffer gets clear and new log can be written.
- logger.warn("AccessLog buffer is full skipping buffer ");
+ logger.warn("AccessLog buffer is full. Do a force writing to file to clear buffer.");
+ //just write current logSet to file.
+ writeLogSetToFile(accessLog, logSet);
+ //after force writing, add accessLogData to current logSet
+ logSet.add(accessLogData);
+ }
+ }
+
+ private void writeLogSetToFile(String accessLog, Set<AccessLogData> logSet) {
+ try {
+ if (ConfigUtils.isDefault(accessLog)) {
+ processWithServiceLogger(logSet);
+ } else {
+ File file = new File(accessLog);
+ createIfLogDirAbsent(file);
+ if (logger.isDebugEnabled()) {
+ logger.debug("Append log to " + accessLog);
+ }
+ renameFile(file);
+ processWithAccessKeyLogger(logSet, file);
+ }
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
}
}
private void writeLogToFile() {
if (!LOG_ENTRIES.isEmpty()) {
for (Map.Entry<String, Set<AccessLogData>> entry : LOG_ENTRIES.entrySet()) {
- try {
- String accessLog = entry.getKey();
- Set<AccessLogData> logSet = entry.getValue();
- if (ConfigUtils.isDefault(accessLog)) {
- processWithServiceLogger(logSet);
- } else {
- File file = new File(accessLog);
- createIfLogDirAbsent(file);
- if (logger.isDebugEnabled()) {
- logger.debug("Append log to " + accessLog);
- }
- renameFile(file);
- processWithAccessKeyLogger(logSet, file);
- }
-
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- }
+ String accessLog = entry.getKey();
+ Set<AccessLogData> logSet = entry.getValue();
+ writeLogSetToFile(accessLog, logSet);
}
}
}