Fix gc_log when running in a web container
All logs supposed to be in gc_log file were ending up in main log
instead when deploying Gerrit in a web container. gc_log was setup only
when running Gerrit as a daemon.
Rework GarbageCollectionFile class to be able to get sitePaths as a
dependency and create a module to load it in WebAppInitializer.
Change-Id: Iee58a1ca36d62060d8f844c00254012db16705e2
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java
index f513348..89fa86b 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java
@@ -195,7 +195,6 @@
throw die("No services enabled, nothing to do");
}
- manager.add(GarbageCollectionLogFile.start(getSitePath()));
if (consoleLog) {
} else {
manager.add(ErrorLogFile.start(getSitePath()));
@@ -364,6 +363,7 @@
}
}
});
+ modules.add(new GarbageCollectionLogFile.Module());
modules.add(GarbageCollectionRunner.module());
return cfgInjector.createChildInjector(modules);
}
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/GarbageCollectionLogFile.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/GarbageCollectionLogFile.java
index 7d33a36..9274e78 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/GarbageCollectionLogFile.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/GarbageCollectionLogFile.java
@@ -16,39 +16,46 @@
import com.google.gerrit.common.Die;
import com.google.gerrit.extensions.events.LifecycleListener;
+import com.google.gerrit.lifecycle.LifecycleModule;
import com.google.gerrit.server.config.SitePaths;
import com.google.gerrit.server.git.GarbageCollection;
import com.google.gerrit.server.util.SystemLog;
+import com.google.inject.Inject;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import java.io.File;
-import java.io.FileNotFoundException;
-public class GarbageCollectionLogFile {
+public class GarbageCollectionLogFile implements LifecycleListener {
- public static LifecycleListener start(File sitePath)
- throws FileNotFoundException {
- File logdir = new SitePaths(sitePath).logs_dir;
+ public static class Module extends LifecycleModule {
+ @Override
+ protected void configure() {
+ bind(GarbageCollectionLogFile.class).asEagerSingleton();
+ listener().to(GarbageCollectionLogFile.class);
+ }
+ }
+
+ @Inject
+ public GarbageCollectionLogFile(SitePaths sitePaths) {
+ File logdir = sitePaths.logs_dir;
if (!logdir.exists() && !logdir.mkdirs()) {
throw new Die("Cannot create log directory: " + logdir);
}
if (SystemLog.shouldConfigure()) {
initLogSystem(logdir);
}
+ }
- return new LifecycleListener() {
- @Override
- public void start() {
- }
+ @Override
+ public void start() {
+ }
- @Override
- public void stop() {
- LogManager.getLogger(GarbageCollection.LOG_NAME).removeAllAppenders();
- }
- };
+ @Override
+ public void stop() {
+ LogManager.getLogger(GarbageCollection.LOG_NAME).removeAllAppenders();
}
private static void initLogSystem(File logdir) {
diff --git a/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java b/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
index c579f45..9c59be0 100644
--- a/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
+++ b/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
@@ -25,6 +25,7 @@
import com.google.gerrit.lifecycle.LifecycleManager;
import com.google.gerrit.lifecycle.LifecycleModule;
import com.google.gerrit.lucene.LuceneIndexModule;
+import com.google.gerrit.pgm.util.GarbageCollectionLogFile;
import com.google.gerrit.reviewdb.client.AuthType;
import com.google.gerrit.server.account.InternalAccountDirectory;
import com.google.gerrit.server.cache.h2.DefaultCacheFactory;
@@ -319,6 +320,7 @@
bind(GerritOptions.class).toInstance(new GerritOptions(false, false));
}
});
+ modules.add(new GarbageCollectionLogFile.Module());
modules.add(GarbageCollectionRunner.module());
return cfgInjector.createChildInjector(modules);
}