summaryrefslogtreecommitdiffstats
path: root/container-accesslogging
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2018-03-01 19:52:29 +0000
committerArne Juul <arnej@yahoo-inc.com>2018-03-11 08:53:06 +0000
commit39b7feb6c665f795f346348894bdad333664618b (patch)
tree532567c83a1a23ba5a35d600734759122fdc1455 /container-accesslogging
parent7d6cdbb8528a4e95bf6722f423810dda6ab46354 (diff)
hack in gzip of access logs
Diffstat (limited to 'container-accesslogging')
-rw-r--r--container-accesslogging/src/main/java/com/yahoo/container/logging/AccessLogHandler.java2
-rw-r--r--container-accesslogging/src/main/java/com/yahoo/container/logging/LogFileHandler.java43
-rw-r--r--container-accesslogging/src/main/resources/configdefinitions/access-log.def3
-rw-r--r--container-accesslogging/src/test/java/com/yahoo/container/logging/YApacheLogTestCase.java1
4 files changed, 43 insertions, 6 deletions
diff --git a/container-accesslogging/src/main/java/com/yahoo/container/logging/AccessLogHandler.java b/container-accesslogging/src/main/java/com/yahoo/container/logging/AccessLogHandler.java
index 89020982b88..5d56ed13e21 100644
--- a/container-accesslogging/src/main/java/com/yahoo/container/logging/AccessLogHandler.java
+++ b/container-accesslogging/src/main/java/com/yahoo/container/logging/AccessLogHandler.java
@@ -18,7 +18,7 @@ class AccessLogHandler {
public AccessLogHandler(AccessLogConfig.FileHandler config) {
access.setUseParentHandlers(false);
- logFileHandler = new LogFileHandler(config.rotateScheme());
+ logFileHandler = new LogFileHandler(config.rotateScheme(), config.compressOnRotation());
logFileHandler.setFilePattern(config.pattern());
logFileHandler.setRotationTimes(config.rotation());
diff --git a/container-accesslogging/src/main/java/com/yahoo/container/logging/LogFileHandler.java b/container-accesslogging/src/main/java/com/yahoo/container/logging/LogFileHandler.java
index 452e24b75f4..abbe346e6e9 100644
--- a/container-accesslogging/src/main/java/com/yahoo/container/logging/LogFileHandler.java
+++ b/container-accesslogging/src/main/java/com/yahoo/container/logging/LogFileHandler.java
@@ -31,6 +31,7 @@ public class LogFileHandler extends StreamHandler {
/** True to use the sequence file name scheme, false (default) to use the date scheme */
private final boolean useSequenceNameScheme;
+ private final boolean compressOnRotation;
private long[] rotationTimes = {0}; //default to one log per day, at midnight
private String filePattern = "./log.%T"; // default to current directory, ms time stamp
private long lastRotationTime = -1; // absolute time (millis since epoch) of current file start
@@ -90,12 +91,23 @@ public class LogFileHandler extends StreamHandler {
LogThread logThread = null;
public LogFileHandler() {
- this(AccessLogConfig.FileHandler.RotateScheme.Enum.DATE);
+ this(AccessLogConfig.FileHandler.RotateScheme.Enum.DATE, false);
+ }
+
+ public LogFileHandler(boolean compressOnRotation) {
+ this(AccessLogConfig.FileHandler.RotateScheme.Enum.DATE, compressOnRotation);
}
public LogFileHandler(AccessLogConfig.FileHandler.RotateScheme.Enum rotateScheme) {
+ this(rotateScheme, false);
+ }
+
+ public LogFileHandler(AccessLogConfig.FileHandler.RotateScheme.Enum rotateScheme,
+ boolean compressOnRotation)
+ {
super();
- this.useSequenceNameScheme = rotateScheme == AccessLogConfig.FileHandler.RotateScheme.Enum.SEQUENCE;
+ this.useSequenceNameScheme = (rotateScheme == AccessLogConfig.FileHandler.RotateScheme.Enum.SEQUENCE);
+ this.compressOnRotation = compressOnRotation;
init();
}
@@ -104,9 +116,14 @@ public class LogFileHandler extends StreamHandler {
*
* @param useSequenceNameScheme True to use the sequence file name scheme, false (default) to use the date scheme
*/
- public LogFileHandler(OutputStream out, Formatter formatter,boolean useSequenceNameScheme) {
- super(out,formatter);
- this.useSequenceNameScheme=useSequenceNameScheme;
+ public LogFileHandler(OutputStream out, Formatter formatter, boolean useSequenceNameScheme) {
+ this(out, formatter, useSequenceNameScheme, false);
+ }
+
+ public LogFileHandler(OutputStream out, Formatter formatter, boolean useSequenceNameScheme, boolean compressOnRotation) {
+ super(out, formatter);
+ this.useSequenceNameScheme = useSequenceNameScheme;
+ this.compressOnRotation = compressOnRotation;
init();
}
@@ -219,6 +236,7 @@ public class LogFileHandler extends StreamHandler {
// figure out new file name, then
// use super.setOutputStream to switch to a new file
+ String oldFileName = fileName;
long now = System.currentTimeMillis();
fileName = LogFormatter.insertDate(filePattern, now);
super.flush();
@@ -243,6 +261,21 @@ public class LogFileHandler extends StreamHandler {
numberOfRecords = 0;
lastRotationTime = now;
nextRotationTime = 0; //figure it out later (lazy evaluation)
+ if (compressOnRotation && (oldFileName != null)) {
+ triggerCompression(oldFileName);
+ }
+ }
+
+ private void triggerCompression(String oldFileName) throws InterruptedException {
+ try {
+ Runtime r = Runtime.getRuntime();
+ Process p = r.exec(new String[] { "gzip", oldFileName });
+ // Detonator pattern: Think of all the fun we can have if gzip isn't what we
+ // think it is, if it doesn't return, etc, etc
+ p.waitFor();
+ } catch (IOException e) {
+ // little we can do...
+ }
}
/** Name files by date - create a symlink with a constant name to the newest file */
diff --git a/container-accesslogging/src/main/resources/configdefinitions/access-log.def b/container-accesslogging/src/main/resources/configdefinitions/access-log.def
index c0b6c0ffd40..7f932540c2b 100644
--- a/container-accesslogging/src/main/resources/configdefinitions/access-log.def
+++ b/container-accesslogging/src/main/resources/configdefinitions/access-log.def
@@ -25,3 +25,6 @@ fileHandler.rotateScheme enum {DATE, SEQUENCE} default=DATE
# Use this as the name of the symlink created pointing to the newest file in the "date" naming scheme.
# This is ignored if the sequence naming scheme is used.
fileHandler.symlink string default=""
+
+# compress the previous access log after rotation
+fileHandler.compressOnRotation bool default=true
diff --git a/container-accesslogging/src/test/java/com/yahoo/container/logging/YApacheLogTestCase.java b/container-accesslogging/src/test/java/com/yahoo/container/logging/YApacheLogTestCase.java
index 9f02e657952..53d501d1db7 100644
--- a/container-accesslogging/src/test/java/com/yahoo/container/logging/YApacheLogTestCase.java
+++ b/container-accesslogging/src/test/java/com/yahoo/container/logging/YApacheLogTestCase.java
@@ -232,6 +232,7 @@ public class YApacheLogTestCase {
AccessLogConfig.Builder builder = new AccessLogConfig.Builder().
fileHandler(new AccessLogConfig.FileHandler.Builder().
pattern("yapachetest2/access").
+ compressOnRotation(false).
rotateScheme(AccessLogConfig.FileHandler.RotateScheme.Enum.SEQUENCE));
AccessLogConfig config = new AccessLogConfig(builder);