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

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