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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user