From 3970ebdba96311fef2d08e20ee75673c9eefa24e Mon Sep 17 00:00:00 2001 From: didfet Date: Sat, 20 Aug 2016 16:25:24 +0200 Subject: [PATCH] Solve #21 --- .../java/info/fetter/logstashforwarder/FileState.java | 11 +++++++++++ .../info/fetter/logstashforwarder/FileWatcher.java | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/main/java/info/fetter/logstashforwarder/FileState.java b/src/main/java/info/fetter/logstashforwarder/FileState.java index eefb5e3..914c43f 100644 --- a/src/main/java/info/fetter/logstashforwarder/FileState.java +++ b/src/main/java/info/fetter/logstashforwarder/FileState.java @@ -52,6 +52,8 @@ public class FileState { private FileState oldFileState; @JsonIgnore private Event fields; + @JsonIgnore + private boolean matchedToNewFile = false; public FileState() { } @@ -160,6 +162,7 @@ public class FileState { public void setOldFileState(FileState oldFileState) { this.oldFileState = oldFileState; + oldFileState.setMatchedToNewFile(true); } public void deleteOldFileState() { @@ -176,6 +179,14 @@ public class FileState { public void setFields(Event fields) { this.fields = fields; } + + public boolean isMatchedToNewFile() { + return matchedToNewFile; + } + + public void setMatchedToNewFile(boolean matchedToNewFile) { + this.matchedToNewFile = matchedToNewFile; + } @Override public String toString() { diff --git a/src/main/java/info/fetter/logstashforwarder/FileWatcher.java b/src/main/java/info/fetter/logstashforwarder/FileWatcher.java index 663d849..b50b7b4 100644 --- a/src/main/java/info/fetter/logstashforwarder/FileWatcher.java +++ b/src/main/java/info/fetter/logstashforwarder/FileWatcher.java @@ -188,6 +188,16 @@ public class FileWatcher { if(logger.isDebugEnabled()) { logger.debug("File " + state.getFile() + " has been truncated or created, not retrieving pointer"); } + oldState = oldWatchMap.get(state.getFile()); + if(oldState != null && ! oldState.isMatchedToNewFile()) { + if(logger.isDebugEnabled()) { + logger.debug("File " + state.getFile() + " has been replaced and not renamed, removing from watchMap"); + } + try { + oldState.getRandomAccessFile().close(); + } catch(Exception e) {} + oldWatchMap.remove(state.getFile()); + } } else { if(logger.isInfoEnabled() && ! state.getFileName().equals(oldState.getFileName())) {