diff options
author | Arne Juul <arnej@yahoo-inc.com> | 2018-03-01 19:52:29 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahoo-inc.com> | 2018-03-11 08:53:06 +0000 |
commit | 39b7feb6c665f795f346348894bdad333664618b (patch) | |
tree | 532567c83a1a23ba5a35d600734759122fdc1455 /container-accesslogging/src/main | |
parent | 7d6cdbb8528a4e95bf6722f423810dda6ab46354 (diff) |
hack in gzip of access logs
Diffstat (limited to 'container-accesslogging/src/main')
3 files changed, 42 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 |