Allow to disable log file rotation

On sites where log file rotation is done by an external service such
as logrotate [1], administrators may wish to disable Gerrit's default
log rotation.

Add a new setting, log.rotate, which disables log rotation when set to
false. The default is true, for backwards compatibility with current
behaviour.

[1] http://manpages.ubuntu.com/manpages/zesty/man8/logrotate.8.html

Change-Id: I76ebf086929fae7dd528e48385265722332dec0a
This commit is contained in:
David Pursehouse
2017-11-21 22:08:12 +09:00
parent 4310ae0d24
commit 633fff3c96
4 changed files with 26 additions and 10 deletions

View File

@@ -3356,6 +3356,12 @@ If set to true, log files are compressed at server startup and then daily at 11p
+ +
Defaults to true. Defaults to true.
[[log.rotate]]log.rotate::
+
If set to true, log files are rotated daily at midnight (GMT).
+
Defaults to true.
[[mimetype]] [[mimetype]]
=== Section mimetype === Section mimetype

View File

@@ -73,16 +73,18 @@ public class ErrorLogFile {
boolean json = config.getBoolean("log", "jsonLogging", false); boolean json = config.getBoolean("log", "jsonLogging", false);
boolean text = config.getBoolean("log", "textLogging", true) || !json; boolean text = config.getBoolean("log", "textLogging", true) || !json;
boolean rotate = config.getBoolean("log", "rotate", true);
if (text) { if (text) {
root.addAppender( root.addAppender(
SystemLog.createAppender( SystemLog.createAppender(
logdir, LOG_NAME, new PatternLayout("[%d] [%t] %-5p %c %x: %m%n"))); logdir, LOG_NAME, new PatternLayout("[%d] [%t] %-5p %c %x: %m%n"), rotate));
} }
if (json) { if (json) {
root.addAppender( root.addAppender(
SystemLog.createAppender(logdir, LOG_NAME + JSON_SUFFIX, new JSONEventLayoutV1())); SystemLog.createAppender(
logdir, LOG_NAME + JSON_SUFFIX, new JSONEventLayoutV1(), rotate));
} }
} }
} }

View File

@@ -15,6 +15,7 @@
package com.google.gerrit.server.git; package com.google.gerrit.server.git;
import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.extensions.events.LifecycleListener;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.config.SitePaths; import com.google.gerrit.server.config.SitePaths;
import com.google.gerrit.server.util.SystemLog; import com.google.gerrit.server.util.SystemLog;
import com.google.inject.Inject; import com.google.inject.Inject;
@@ -22,13 +23,13 @@ import java.nio.file.Path;
import org.apache.log4j.LogManager; import org.apache.log4j.LogManager;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout; import org.apache.log4j.PatternLayout;
import org.eclipse.jgit.lib.Config;
public class GarbageCollectionLogFile implements LifecycleListener { public class GarbageCollectionLogFile implements LifecycleListener {
@Inject @Inject
public GarbageCollectionLogFile(SitePaths sitePaths) { public GarbageCollectionLogFile(SitePaths sitePaths, @GerritServerConfig Config config) {
if (SystemLog.shouldConfigure()) { if (SystemLog.shouldConfigure()) {
initLogSystem(sitePaths.logs_dir); initLogSystem(sitePaths.logs_dir, config.getBoolean("log", "rotate", true));
} }
} }
@@ -40,12 +41,12 @@ public class GarbageCollectionLogFile implements LifecycleListener {
LogManager.getLogger(GarbageCollection.LOG_NAME).removeAllAppenders(); LogManager.getLogger(GarbageCollection.LOG_NAME).removeAllAppenders();
} }
private static void initLogSystem(Path logdir) { private static void initLogSystem(Path logdir, boolean rotate) {
Logger gcLogger = LogManager.getLogger(GarbageCollection.LOG_NAME); Logger gcLogger = LogManager.getLogger(GarbageCollection.LOG_NAME);
gcLogger.removeAllAppenders(); gcLogger.removeAllAppenders();
gcLogger.addAppender( gcLogger.addAppender(
SystemLog.createAppender( SystemLog.createAppender(
logdir, GarbageCollection.LOG_NAME, new PatternLayout("[%d] %-5p %x: %m%n"))); logdir, GarbageCollection.LOG_NAME, new PatternLayout("[%d] %-5p %x: %m%n"), rotate));
gcLogger.setAdditivity(false); gcLogger.setAdditivity(false);
} }
} }

View File

@@ -27,6 +27,7 @@ import java.nio.file.Path;
import org.apache.log4j.Appender; import org.apache.log4j.Appender;
import org.apache.log4j.AsyncAppender; import org.apache.log4j.AsyncAppender;
import org.apache.log4j.DailyRollingFileAppender; import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Layout; import org.apache.log4j.Layout;
import org.apache.log4j.LogManager; import org.apache.log4j.LogManager;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
@@ -44,19 +45,21 @@ public class SystemLog {
private final SitePaths site; private final SitePaths site;
private final int asyncLoggingBufferSize; private final int asyncLoggingBufferSize;
private final boolean rotateLogs;
@Inject @Inject
public SystemLog(SitePaths site, @GerritServerConfig Config config) { public SystemLog(SitePaths site, @GerritServerConfig Config config) {
this.site = site; this.site = site;
this.asyncLoggingBufferSize = config.getInt("core", "asyncLoggingBufferSize", 64); this.asyncLoggingBufferSize = config.getInt("core", "asyncLoggingBufferSize", 64);
this.rotateLogs = config.getBoolean("log", "rotate", true);
} }
public static boolean shouldConfigure() { public static boolean shouldConfigure() {
return Strings.isNullOrEmpty(System.getProperty(LOG4J_CONFIGURATION)); return Strings.isNullOrEmpty(System.getProperty(LOG4J_CONFIGURATION));
} }
public static Appender createAppender(Path logdir, String name, Layout layout) { public static Appender createAppender(Path logdir, String name, Layout layout, boolean rotate) {
final DailyRollingFileAppender dst = new DailyRollingFileAppender(); final FileAppender dst = rotate ? new DailyRollingFileAppender() : new FileAppender();
dst.setName(name); dst.setName(name);
dst.setLayout(layout); dst.setLayout(layout);
dst.setEncoding(UTF_8.name()); dst.setEncoding(UTF_8.name());
@@ -70,6 +73,10 @@ public class SystemLog {
} }
public AsyncAppender createAsyncAppender(String name, Layout layout) { public AsyncAppender createAsyncAppender(String name, Layout layout) {
return createAsyncAppender(name, layout, rotateLogs);
}
private AsyncAppender createAsyncAppender(String name, Layout layout, boolean rotate) {
AsyncAppender async = new AsyncAppender(); AsyncAppender async = new AsyncAppender();
async.setName(name); async.setName(name);
async.setBlocking(true); async.setBlocking(true);
@@ -77,7 +84,7 @@ public class SystemLog {
async.setLocationInfo(false); async.setLocationInfo(false);
if (shouldConfigure()) { if (shouldConfigure()) {
async.addAppender(createAppender(site.logs_dir, name, layout)); async.addAppender(createAppender(site.logs_dir, name, layout, rotate));
} else { } else {
Appender appender = LogManager.getLogger(name).getAppender(name); Appender appender = LogManager.getLogger(name).getAppender(name);
if (appender != null) { if (appender != null) {