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);
   }