You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2017/08/31 12:43:09 UTC

qpid-broker-j git commit: QPID-7892: [Java Broker] Escape regexp special characters in logback file name pattern for rolled log files

Repository: qpid-broker-j
Updated Branches:
  refs/heads/master f9b9bf836 -> 8c26b5310


QPID-7892: [Java Broker] Escape regexp special characters in logback file name pattern for rolled log files


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/8c26b531
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/8c26b531
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/8c26b531

Branch: refs/heads/master
Commit: 8c26b53109372f3f6bee425d9c741aad09a43d83
Parents: f9b9bf8
Author: Alex Rudyy <or...@apache.org>
Authored: Thu Aug 31 13:42:24 2017 +0100
Committer: Alex Rudyy <or...@apache.org>
Committed: Thu Aug 31 13:42:24 2017 +0100

----------------------------------------------------------------------
 .../logging/logback/RollingPolicyDecorator.java | 67 ++++++++++++++------
 .../logback/RollingPolicyDecoratorTest.java     | 66 ++-----------------
 2 files changed, 51 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c26b531/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/RollingPolicyDecorator.java
----------------------------------------------------------------------
diff --git a/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/RollingPolicyDecorator.java b/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/RollingPolicyDecorator.java
index 1f8e49a..0d20a22 100644
--- a/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/RollingPolicyDecorator.java
+++ b/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/RollingPolicyDecorator.java
@@ -74,8 +74,9 @@ public class RollingPolicyDecorator implements RollingPolicy
 
         String filePathPattern = _decorated.getFileNamePattern();
         String filePathRegExp = new FileNamePattern(filePathPattern, _decorated.getContext()).toRegex();
-        _rolledFilesBaseFolder = getRolledFilesBaseFolderFromRegExp(filePathRegExp);
-        _rolledFileRegExp = Pattern.compile(filePathRegExp);
+        FilePathBaseFolderAndPatternPair pair = new FilePathBaseFolderAndPatternPair(filePathRegExp);
+        _rolledFilesBaseFolder = pair.getBaseFolder();
+        _rolledFileRegExp = pair.getPattern();
         _currentScanTask = null;
     }
 
@@ -159,24 +160,6 @@ public class RollingPolicyDecorator implements RollingPolicy
         return task;
     }
 
-    private Path getRolledFilesBaseFolderFromRegExp(String fileNamePattern)
-    {
-        int firstDigitPatternPosition= fileNamePattern.indexOf("\\d");
-        if (firstDigitPatternPosition == -1)
-        {
-            throw new RuntimeException("Rolling policy file pattern does not seem to contain date or integer token");
-        }
-        int slashBeforeDigitPatternPosition = fileNamePattern.lastIndexOf("/", firstDigitPatternPosition);
-        if (slashBeforeDigitPatternPosition != -1)
-        {
-            return new File(fileNamePattern.substring(0, slashBeforeDigitPatternPosition)).toPath().toAbsolutePath();
-        }
-        else
-        {
-            return new File(System.getProperty("user.dir")).toPath().toAbsolutePath();
-        }
-    }
-
     private class ScanTask implements Runnable
     {
         private int _rescanCounter;
@@ -309,4 +292,48 @@ public class RollingPolicyDecorator implements RollingPolicy
         }
 
     }
+
+    private static class FilePathBaseFolderAndPatternPair
+    {
+        private static Pattern REGEX_SPECIAL_CHARACTERS = Pattern.compile("[{}()\\[\\].+*?^$\\\\|]");
+        private final Path _baseFolder;
+        private final Pattern _pattern;
+
+        public FilePathBaseFolderAndPatternPair(String fileNamePattern)
+        {
+            String path;
+            int firstDigitPatternPosition= fileNamePattern.indexOf("\\d");
+            if (firstDigitPatternPosition == -1)
+            {
+                throw new RuntimeException("Rolling policy file pattern does not seem to contain date or integer token");
+            }
+            int slashBeforeDigitPatternPosition = fileNamePattern.lastIndexOf("/", firstDigitPatternPosition);
+            if (slashBeforeDigitPatternPosition != -1)
+            {
+                path = fileNamePattern.substring(0, slashBeforeDigitPatternPosition);
+                fileNamePattern = fileNamePattern.substring( slashBeforeDigitPatternPosition + 1);
+            }
+            else
+            {
+                path = System.getProperty("user.dir");
+            }
+            _baseFolder = new File(path).toPath().toAbsolutePath();
+            _pattern = Pattern.compile(escape(path) + "/" + fileNamePattern);
+        }
+
+        private String escape(String string)
+        {
+            return REGEX_SPECIAL_CHARACTERS.matcher(string).replaceAll("\\\\$0");
+        }
+
+        public Path getBaseFolder()
+        {
+            return _baseFolder;
+        }
+
+        public Pattern getPattern()
+        {
+            return _pattern;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c26b531/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/RollingPolicyDecoratorTest.java
----------------------------------------------------------------------
diff --git a/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/RollingPolicyDecoratorTest.java b/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/RollingPolicyDecoratorTest.java
index 35a7590..2f19535 100644
--- a/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/RollingPolicyDecoratorTest.java
+++ b/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/RollingPolicyDecoratorTest.java
@@ -31,26 +31,15 @@ import static org.mockito.Mockito.when;
 
 import java.io.File;
 import java.io.IOException;
-import java.nio.file.FileVisitResult;
-import java.nio.file.FileVisitor;
-import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.regex.Pattern;
 
-
 import ch.qos.logback.core.Context;
 import ch.qos.logback.core.FileAppender;
 import ch.qos.logback.core.rolling.RollingPolicyBase;
-import org.apache.qpid.test.utils.QpidTestCase;
-import org.apache.qpid.test.utils.TestFileUtils;
-import org.apache.qpid.server.util.FileUtils;
-
 import ch.qos.logback.core.rolling.helper.FileNamePattern;
 import org.hamcrest.BaseMatcher;
 import org.hamcrest.Description;
@@ -60,6 +49,10 @@ import org.mockito.stubbing.Answer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.qpid.server.util.FileUtils;
+import org.apache.qpid.test.utils.QpidTestCase;
+import org.apache.qpid.test.utils.TestFileUtils;
+
 public class RollingPolicyDecoratorTest extends QpidTestCase
 {
     private static final Logger LOGGER = LoggerFactory.getLogger(RollingPolicyDecoratorTest.class);
@@ -166,8 +159,6 @@ public class RollingPolicyDecoratorTest extends QpidTestCase
         _policy.rollover();
         verify(_delegate).rollover();
 
-        scan(_baseFolder);
-
         Matcher<String[]> matcher = getMatcher(new String[]{ _testFile.getName() });
         verify(_listener).onRollover(eq(_baseFolder.toPath()), argThat(matcher));
 
@@ -178,55 +169,6 @@ public class RollingPolicyDecoratorTest extends QpidTestCase
         verify(_listener).onRollover(eq(_baseFolder.toPath()), argThat(matcher2));
     }
 
-    private void scan(final File baseFolder)
-    {
-        final List<Path> rolledFiles = new ArrayList<>();
-        try
-        {
-            Files.walkFileTree(baseFolder.toPath(), new FileVisitor<Path>()
-            {
-                @Override
-                public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
-                {
-                    return FileVisitResult.CONTINUE;
-                }
-
-                @Override
-                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
-                {
-                    String absolutePath = file.toAbsolutePath().toString();
-                    LOGGER.debug("Visiting file: {} ", absolutePath);
-                    if (File.separatorChar == '\\')
-                    {
-                        absolutePath = absolutePath.replace('\\', '/');
-                    }
-
-                    if (_rolledFileRegExp.matcher(absolutePath).matches())
-                    {
-                        rolledFiles.add(file);
-                    }
-                    return  FileVisitResult.CONTINUE;
-                }
-
-                @Override
-                public FileVisitResult visitFileFailed(Path file, IOException exc)
-                {
-                    return FileVisitResult.CONTINUE;
-                }
-
-                @Override
-                public FileVisitResult postVisitDirectory(Path dir, IOException exc)
-                {
-                    return FileVisitResult.CONTINUE;
-                }
-            });
-        }
-        catch(IOException e)
-        {
-            LOGGER.warn("Unexpected IOException while scanning for rollover files.", e);
-        }
-        LOGGER.debug("Rolled files: {}", rolledFiles);
-    }
 
     private Matcher<String[]> getMatcher(final String[] expected)
     {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org