You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2018/11/16 18:09:52 UTC

svn commit: r1846735 - in /tomcat/trunk: java/org/apache/juli/AsyncFileHandler.java java/org/apache/juli/FileHandler.java test/org/apache/juli/TestFileHandler.java

Author: markt
Date: Fri Nov 16 18:09:52 2018
New Revision: 1846735

URL: http://svn.apache.org/viewvc?rev=1846735&view=rev
Log:
Partial fix for https://bz.apache.org/bugzilla/show_bug.cgi?id=53620
Add a constructor for all configurable properties

Modified:
    tomcat/trunk/java/org/apache/juli/AsyncFileHandler.java
    tomcat/trunk/java/org/apache/juli/FileHandler.java
    tomcat/trunk/test/org/apache/juli/TestFileHandler.java

Modified: tomcat/trunk/java/org/apache/juli/AsyncFileHandler.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/juli/AsyncFileHandler.java?rev=1846735&r1=1846734&r2=1846735&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/juli/AsyncFileHandler.java (original)
+++ tomcat/trunk/java/org/apache/juli/AsyncFileHandler.java Fri Nov 16 18:09:52 2018
@@ -71,14 +71,14 @@ public class AsyncFileHandler extends Fi
     protected volatile boolean closed = false;
 
     public AsyncFileHandler() {
-        this(null, null, null, DEFAULT_MAX_DAYS);
+        this(null, null, null);
     }
 
     public AsyncFileHandler(String directory, String prefix, String suffix) {
-        this(directory, prefix, suffix, DEFAULT_MAX_DAYS);
+        this(directory, prefix, suffix, null);
     }
 
-    public AsyncFileHandler(String directory, String prefix, String suffix, int maxDays) {
+    public AsyncFileHandler(String directory, String prefix, String suffix, Integer maxDays) {
         super(directory, prefix, suffix, maxDays);
         open();
     }

Modified: tomcat/trunk/java/org/apache/juli/FileHandler.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/juli/FileHandler.java?rev=1846735&r1=1846734&r2=1846735&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/juli/FileHandler.java (original)
+++ tomcat/trunk/java/org/apache/juli/FileHandler.java Fri Nov 16 18:09:52 2018
@@ -95,7 +95,10 @@ import java.util.regex.Pattern;
  * </ul>
  */
 public class FileHandler extends Handler {
+
     public static final int DEFAULT_MAX_DAYS = -1;
+    public static final int DEFAULT_BUFFER_SIZE = -1;
+
 
     private static final ExecutorService DELETE_FILES_SERVICE =
             Executors.newSingleThreadExecutor(new ThreadFactory() {
@@ -151,19 +154,28 @@ public class FileHandler extends Handler
 
 
     public FileHandler() {
-        this(null, null, null, DEFAULT_MAX_DAYS);
+        this(null, null, null);
     }
 
 
     public FileHandler(String directory, String prefix, String suffix) {
-        this(directory, prefix, suffix, DEFAULT_MAX_DAYS);
+        this(directory, prefix, suffix, null);
+    }
+
+
+    public FileHandler(String directory, String prefix, String suffix, Integer maxDays) {
+        this(directory, prefix, suffix, maxDays, null, null);
     }
 
-    public FileHandler(String directory, String prefix, String suffix, int maxDays) {
+
+    public FileHandler(String directory, String prefix, String suffix, Integer maxDays,
+            Boolean rotatable, Integer bufferSize) {
         this.directory = directory;
         this.prefix = prefix;
         this.suffix = suffix;
         this.maxDays = maxDays;
+        this.rotatable = rotatable;
+        this.bufferSize = bufferSize;
         configure();
         openWriter();
         clean();
@@ -183,31 +195,31 @@ public class FileHandler extends Handler
     /**
      * The directory in which log files are created.
      */
-    private String directory = null;
+    private String directory;
 
 
     /**
      * The prefix that is added to log file filenames.
      */
-    private String prefix = null;
+    private String prefix;
 
 
     /**
      * The suffix that is added to log file filenames.
      */
-    private String suffix = null;
+    private String suffix;
 
 
     /**
      * Determines whether the log file is rotatable
      */
-    private boolean rotatable = true;
+    private Boolean rotatable;
 
 
     /**
      * Maximum number of days to keep the log files
      */
-    private int maxDays = DEFAULT_MAX_DAYS;
+    private Integer maxDays;
 
 
     /**
@@ -225,7 +237,7 @@ public class FileHandler extends Handler
     /**
      * Log buffer size.
      */
-    private int bufferSize = -1;
+    private Integer bufferSize;
 
 
     /**
@@ -257,7 +269,7 @@ public class FileHandler extends Handler
         writerLock.readLock().lock();
         try {
             // If the date has changed, switch log files
-            if (rotatable && !date.equals(tsDate)) {
+            if (rotatable.booleanValue() && !date.equals(tsDate)) {
                 // Upgrade to writeLock before we switch
                 writerLock.readLock().unlock();
                 writerLock.writeLock().lock();
@@ -288,7 +300,7 @@ public class FileHandler extends Handler
             try {
                 if (writer != null) {
                     writer.write(result);
-                    if (bufferSize < 0) {
+                    if (bufferSize.intValue() < 0) {
                         writer.flush();
                     }
                 } else {
@@ -362,15 +374,16 @@ public class FileHandler extends Handler
     private void configure() {
 
         Timestamp ts = new Timestamp(System.currentTimeMillis());
-        String tsString = ts.toString().substring(0, 19);
-        date = tsString.substring(0, 10);
+        date = ts.toString().substring(0, 10);
 
         String className = this.getClass().getName(); //allow classes to override
 
         ClassLoader cl = Thread.currentThread().getContextClassLoader();
 
         // Retrieve configuration of logging file name
-        rotatable = Boolean.parseBoolean(getProperty(className + ".rotatable", "true"));
+        if (rotatable == null) {
+            rotatable = Boolean.valueOf(getProperty(className + ".rotatable", "true"));
+        }
         if (directory == null) {
             directory = getProperty(className + ".directory", "logs");
         }
@@ -382,31 +395,37 @@ public class FileHandler extends Handler
         }
 
         // https://bz.apache.org/bugzilla/show_bug.cgi?id=61232
-        boolean shouldCheckForRedundantSeparator = !rotatable && !prefix.isEmpty()
-                && !suffix.isEmpty();
+        boolean shouldCheckForRedundantSeparator =
+                !rotatable.booleanValue() && !prefix.isEmpty() && !suffix.isEmpty();
         // assuming separator is just one char, if there are use cases with
         // more, the notion of separator might be introduced
-        if (shouldCheckForRedundantSeparator
-                && (prefix.charAt(prefix.length() - 1) == suffix.charAt(0))) {
+        if (shouldCheckForRedundantSeparator &&
+                (prefix.charAt(prefix.length() - 1) == suffix.charAt(0))) {
             suffix = suffix.substring(1);
         }
 
         pattern = Pattern.compile("^(" + Pattern.quote(prefix) + ")\\d{4}-\\d{1,2}-\\d{1,2}("
                 + Pattern.quote(suffix) + ")$");
-        String sMaxDays = getProperty(className + ".maxDays", String.valueOf(DEFAULT_MAX_DAYS));
-        if (maxDays <= 0) {
+
+        if (maxDays == null) {
+            String sMaxDays = getProperty(className + ".maxDays", String.valueOf(DEFAULT_MAX_DAYS));
             try {
-                maxDays = Integer.parseInt(sMaxDays);
+                maxDays = Integer.valueOf(sMaxDays);
             } catch (NumberFormatException ignore) {
-                // no-op
+                maxDays = Integer.valueOf(DEFAULT_MAX_DAYS);
             }
         }
-        String sBufferSize = getProperty(className + ".bufferSize", String.valueOf(bufferSize));
-        try {
-            bufferSize = Integer.parseInt(sBufferSize);
-        } catch (NumberFormatException ignore) {
-            //no op
+
+        if (bufferSize == null) {
+            String sBufferSize = getProperty(className + ".bufferSize",
+                    String.valueOf(DEFAULT_BUFFER_SIZE));
+            try {
+                bufferSize = Integer.valueOf(sBufferSize);
+            } catch (NumberFormatException ignore) {
+                bufferSize = Integer.valueOf(DEFAULT_BUFFER_SIZE);
+            }
         }
+
         // Get encoding for the logging file
         String encoding = getProperty(className + ".encoding", null);
         if (encoding != null && encoding.length() > 0) {
@@ -446,7 +465,6 @@ public class FileHandler extends Handler
 
         // Set error manager
         setErrorManager(new ErrorManager());
-
     }
 
 
@@ -484,7 +502,7 @@ public class FileHandler extends Handler
         OutputStream os = null;
         try {
             File pathname = new File(dir.getAbsoluteFile(), prefix
-                    + (rotatable ? date : "") + suffix);
+                    + (rotatable.booleanValue() ? date : "") + suffix);
             File parent = pathname.getParentFile();
             if (!parent.mkdirs() && !parent.isDirectory()) {
                 reportError("Unable to create [" + parent + "]", null, ErrorManager.OPEN_FAILURE);
@@ -493,7 +511,7 @@ public class FileHandler extends Handler
             }
             String encoding = getEncoding();
             fos = new FileOutputStream(pathname, true);
-            os = bufferSize > 0 ? new BufferedOutputStream(fos, bufferSize) : fos;
+            os = bufferSize.intValue() > 0 ? new BufferedOutputStream(fos, bufferSize.intValue()) : fos;
             writer = new PrintWriter(
                     (encoding != null) ? new OutputStreamWriter(os, encoding)
                                        : new OutputStreamWriter(os), false);
@@ -521,7 +539,7 @@ public class FileHandler extends Handler
     }
 
     private void clean() {
-        if (maxDays <= 0) {
+        if (maxDays.intValue() <= 0) {
             return;
         }
         DELETE_FILES_SERVICE.submit(() -> {
@@ -537,7 +555,7 @@ public class FileHandler extends Handler
     }
 
     private DirectoryStream<Path> streamFilesForDelete() throws IOException {
-        LocalDate maxDaysOffset = LocalDate.now().minus(maxDays, ChronoUnit.DAYS);
+        LocalDate maxDaysOffset = LocalDate.now().minus(maxDays.intValue(), ChronoUnit.DAYS);
         return Files.newDirectoryStream(new File(directory).toPath(), path -> {
             boolean result = false;
             String date = obtainDateFromPath(path);

Modified: tomcat/trunk/test/org/apache/juli/TestFileHandler.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/juli/TestFileHandler.java?rev=1846735&r1=1846734&r2=1846735&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/juli/TestFileHandler.java (original)
+++ tomcat/trunk/test/org/apache/juli/TestFileHandler.java Fri Nov 16 18:09:52 2018
@@ -77,7 +77,7 @@ public class TestFileHandler {
     public void testCleanOnInitOneHandler() throws Exception {
         generateLogFiles(logsDir, PREFIX_1, SUFIX_1, 3);
 
-        FileHandler fh1 = new FileHandler(logsDir.getAbsolutePath(), PREFIX_1, SUFIX_1, 2);
+        FileHandler fh1 = new FileHandler(logsDir.getAbsolutePath(), PREFIX_1, SUFIX_1, Integer.valueOf(2));
 
         Thread.sleep(1000);
 
@@ -90,10 +90,10 @@ public class TestFileHandler {
     public void testCleanOnInitMultipleHandlers() throws Exception {
         generateLogFiles(logsDir, PREFIX_1, SUFIX_1, 3);
 
-        FileHandler fh1 = new FileHandler(logsDir.getAbsolutePath(), PREFIX_1, SUFIX_1, 2);
-        FileHandler fh2 = new FileHandler(logsDir.getAbsolutePath(), PREFIX_1, SUFIX_2, 2);
-        FileHandler fh3 = new FileHandler(logsDir.getAbsolutePath(), PREFIX_2, SUFIX_1, 2);
-        FileHandler fh4 = new FileHandler(logsDir.getAbsolutePath(), PREFIX_3, SUFIX_1, 2);
+        FileHandler fh1 = new FileHandler(logsDir.getAbsolutePath(), PREFIX_1, SUFIX_1, Integer.valueOf(2));
+        FileHandler fh2 = new FileHandler(logsDir.getAbsolutePath(), PREFIX_1, SUFIX_2, Integer.valueOf(2));
+        FileHandler fh3 = new FileHandler(logsDir.getAbsolutePath(), PREFIX_2, SUFIX_1, Integer.valueOf(2));
+        FileHandler fh4 = new FileHandler(logsDir.getAbsolutePath(), PREFIX_3, SUFIX_1, Integer.valueOf(2));
 
         Thread.sleep(1000);
 
@@ -109,7 +109,7 @@ public class TestFileHandler {
     public void testCleanDisabled() throws Exception {
         generateLogFiles(logsDir, PREFIX_1, SUFIX_1, 3);
 
-        FileHandler fh1 = new FileHandler(logsDir.getAbsolutePath(), PREFIX_1, SUFIX_1, -1);
+        FileHandler fh1 = new FileHandler(logsDir.getAbsolutePath(), PREFIX_1, SUFIX_1, null);
 
         Thread.sleep(1000);
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org