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