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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org