Resolve out any symlinks before starting logging
This way site_path can be on NFS, logs/ can be a symlink to a local
disk directory, and the NFS mount can temporarily disappear without
the logging being affected.
Change-Id: I190860237f91ba593bb39e58795d20a42c7cdc0b
Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/ErrorLogFile.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/ErrorLogFile.java
index 8bf5ee5..14c8d9f 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/ErrorLogFile.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/ErrorLogFile.java
@@ -30,6 +30,7 @@
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.IOException;
public class ErrorLogFile {
static final String LOG_NAME = "error_log";
@@ -64,7 +65,7 @@
dst.setName(LOG_NAME);
dst.setLayout(layout);
dst.setEncoding("UTF-8");
- dst.setFile(new File(logdir, LOG_NAME).getAbsolutePath());
+ dst.setFile(new File(resolve(logdir), LOG_NAME).getPath());
dst.setImmediateFlush(true);
dst.setAppend(true);
dst.setThreshold(Level.INFO);
@@ -88,6 +89,14 @@
};
}
+ private static File resolve(final File logs_dir) {
+ try {
+ return logs_dir.getCanonicalFile();
+ } catch (IOException e) {
+ return logs_dir.getAbsoluteFile();
+ }
+ }
+
private ErrorLogFile() {
}
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/LogFileCompressor.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/LogFileCompressor.java
index c579e67..2e45fc5 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/LogFileCompressor.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/LogFileCompressor.java
@@ -69,7 +69,15 @@
@Inject
LogFileCompressor(final SitePaths site) {
- logs_dir = site.logs_dir;
+ logs_dir = resolve(site.logs_dir);
+ }
+
+ private static File resolve(final File logs_dir) {
+ try {
+ return logs_dir.getCanonicalFile();
+ } catch (IOException e) {
+ return logs_dir.getAbsoluteFile();
+ }
}
@Override