aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-01-13 11:11:29 +0100
committerHarald Musum <musum@verizonmedia.com>2020-01-13 11:11:29 +0100
commit088f0fc4346adb1acea0ae9ac3b4487b826b767a (patch)
treefb561a97e252f17c13a9264e2eb597ea6f0a0456
parent4976b922193b1071db4711328caf31bc54e1a0d1 (diff)
Configure ZooKeeper log file handler
-rwxr-xr-xconfigserver/src/main/sh/start-configserver6
-rwxr-xr-xcontainer-disc/src/main/sh/vespa-start-container-daemon.sh6
-rw-r--r--vespalog/src/main/java/com/yahoo/log/LogSetup.java20
-rw-r--r--vespalog/src/test/java/com/yahoo/log/LogSetupTestCase.java8
4 files changed, 23 insertions, 17 deletions
diff --git a/configserver/src/main/sh/start-configserver b/configserver/src/main/sh/start-configserver
index 8211c060d1e..bec206214f8 100755
--- a/configserver/src/main/sh/start-configserver
+++ b/configserver/src/main/sh/start-configserver
@@ -120,8 +120,8 @@ fi
fixlimits
checkjava
-ZOOKEEPER_LOG_FILE="${VESPA_HOME}/logs/vespa/zookeeper.configserver.log"
-rm -f $ZOOKEEPER_LOG_FILE*lck
+ZOOKEEPER_LOG_FILE_PREFIX="${VESPA_HOME}/logs/vespa/zookeeper.configserver"
+rm -f ZOOKEEPER_LOG_FILE_PREFIX*lck
# common setup
export VESPA_LOG_TARGET=file:${VESPA_HOME}/logs/vespa/vespa.log
@@ -188,6 +188,6 @@ vespa-run-as-vespa-user vespa-runserver -s configserver -r 30 -p $pidfile -- \
-Djdisc.logger.level=ALL \
-Djdisc.logger.tag=jdisc/configserver \
-Dfile.encoding=UTF-8 \
- -Dzookeeperlogfile=${ZOOKEEPER_LOG_FILE} \
+ -Dzookeeper_log_file_prefix=${ZOOKEEPER_LOG_FILE_PREFIX} \
-cp "$CP" \
com.yahoo.jdisc.core.StandaloneMain standalone-container-jar-with-dependencies.jar
diff --git a/container-disc/src/main/sh/vespa-start-container-daemon.sh b/container-disc/src/main/sh/vespa-start-container-daemon.sh
index 228f731fd5c..382843b5688 100755
--- a/container-disc/src/main/sh/vespa-start-container-daemon.sh
+++ b/container-disc/src/main/sh/vespa-start-container-daemon.sh
@@ -22,8 +22,8 @@ cd ${VESPA_HOME} || { echo "Cannot cd to ${VESPA_HOME}" 1>&2; exit 1; }
DISCRIMINATOR=`echo ${VESPA_CONFIG_ID} | md5sum | cut -d' ' -f1`
CONTAINER_HOME="${VESPA_HOME}/var/jdisc_container/${DISCRIMINATOR}/"
-ZOOKEEPER_LOG_FILE="${VESPA_HOME}/logs/vespa/zookeeper.${VESPA_SERVICE_NAME}.log"
-rm -f $ZOOKEEPER_LOG_FILE*lck
+ZOOKEEPER_LOG_FILE_PREFIX="${VESPA_HOME}/logs/vespa/zookeeper.${VESPA_SERVICE_NAME}"
+rm -f ZOOKEEPER_LOG_FILE_PREFIX*lck
# common setup
export VESPA_LOG_TARGET=file:${VESPA_HOME}/logs/vespa/vespa.log
@@ -226,7 +226,7 @@ exec $numactlcmd $envcmd java \
-Djdisc.logger.tag="${VESPA_CONFIG_ID}" \
-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger \
-Dvespa.log.control.dir="${VESPA_LOG_CONTROL_DIR}" \
- -Dzookeeperlogfile="${ZOOKEEPER_LOG_FILE}" \
+ -Dzookeeper_log_file_prefix="${ZOOKEEPER_LOG_FILE_PREFIX}" \
-Dfile.encoding=UTF-8 \
-cp "$CP" \
"$@" \
diff --git a/vespalog/src/main/java/com/yahoo/log/LogSetup.java b/vespalog/src/main/java/com/yahoo/log/LogSetup.java
index c29374b433b..df642f23075 100644
--- a/vespalog/src/main/java/com/yahoo/log/LogSetup.java
+++ b/vespalog/src/main/java/com/yahoo/log/LogSetup.java
@@ -147,7 +147,7 @@ public class LogSetup {
}
Logger.getLogger("").setLevel(Level.ALL);
logHandler = new VespaLogHandler(getLogTargetFromString(target), new VespaLevelControllerRepo(logCtlFn, lev, app), service, app);
- String zookeeperLogFile = System.getProperty("zookeeperlogfile");
+ String zookeeperLogFile = System.getProperty("zookeeper_log_file_prefix");
if (zookeeperLogFile != null) {
zooKeeperFilter = new ZooKeeperFilter(zookeeperLogFile);
logHandler.setFilter(zooKeeperFilter);
@@ -168,28 +168,32 @@ public class LogSetup {
/**
* Class that has an isLoggable methods that handles log records that
- * start with "org.apache.zookeeper." in
- * a special way (writing them to the logfile specified in the system property
- * zookeeperlogfile, "/tmp/zookeeper.log" if not set) and returning false.
+ * start with "org.apache.zookeeper." or "org.apache.curator"
+ * (writing them to a log file with the prefix specified in the system property
+ * zookeeper_log_file_prefix) and returning false.
* For other log records, isLoggable returns true
*/
static class ZooKeeperFilter implements Filter {
+ private static final int FILE_SIZE = 10*1024*1024; // Max 10 Mb per log file
+ private static final int maxFilesCount = 10; // Keep at most 10 log files
+
private FileHandler fileHandler;
- ZooKeeperFilter(String logFile) {
+ ZooKeeperFilter(String logFilePrefix) {
+ String logFilePattern = logFilePrefix + ".%g.log";
try {
- fileHandler = new FileHandler(logFile, true);
+ fileHandler = new FileHandler(logFilePattern, FILE_SIZE, maxFilesCount, true);
fileHandler.setFormatter(new VespaFormatter());
} catch (IOException e) {
- System.out.println("Not able to create " + logFile);
+ System.out.println("Not able to create " + logFilePattern);
fileHandler = null;
}
}
/**
* Return true if loggable (ordinary log record), returns false if this filter
- * logs it itself
+ * logs the log record itself
*
* @param record a #{@link LogRecord}
* @return true if loggable, false otherwise
diff --git a/vespalog/src/test/java/com/yahoo/log/LogSetupTestCase.java b/vespalog/src/test/java/com/yahoo/log/LogSetupTestCase.java
index 2cea88b1c36..230744bb26f 100644
--- a/vespalog/src/test/java/com/yahoo/log/LogSetupTestCase.java
+++ b/vespalog/src/test/java/com/yahoo/log/LogSetupTestCase.java
@@ -9,6 +9,7 @@ import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
import java.time.Instant;
+import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
@@ -80,7 +81,7 @@ public class LogSetupTestCase {
public void testSetup() throws IOException {
try {
final File zookeeperLogFile = folder.newFile("zookeeper.log");
- System.setProperty("zookeeperlogfile", zookeeperLogFile.getAbsolutePath());
+ System.setProperty("zookeeper_log_file_prefix", zookeeperLogFile.getAbsolutePath());
LogSetup.initVespaLogging("TST");
Logger.getLogger("").log(VespaLogHandlerTestCase.record2);
Logger.getLogger("").log(VespaLogHandlerTestCase.record1);
@@ -125,12 +126,13 @@ public class LogSetupTestCase {
@Test
public void testZooKeeperFilter() throws IOException {
- final File file = folder.newFile("zookeeper.log");
+ final File file = folder.newFile("zookeeper");
LogSetup.ZooKeeperFilter filter = new LogSetup.ZooKeeperFilter(file.getAbsolutePath());
assertThat(filter.isLoggable(zookeeperLogRecord), is(false));
//assertThat(filter.isLoggable(zookeeperLogRecordError), is(true));
assertThat(filter.isLoggable(notzookeeperLogRecord), is(true));
- String[] lines = VespaLogHandlerTestCase.readFile(file.getAbsolutePath());
+ File actualLogFile = new File(file.getParent(), "zookeeper.0.log"); // Real file name will have .0.log appended
+ String[] lines = VespaLogHandlerTestCase.readFile(actualLogFile.getAbsolutePath());
assertThat(lines.length, is(1));
assertEquals(zookeeperLogRecordString, lines[0]);
}