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