diff options
author | Harald Musum <musum@verizonmedia.com> | 2020-01-13 11:11:29 +0100 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2020-01-13 11:11:29 +0100 |
commit | 088f0fc4346adb1acea0ae9ac3b4487b826b767a (patch) | |
tree | fb561a97e252f17c13a9264e2eb597ea6f0a0456 | |
parent | 4976b922193b1071db4711328caf31bc54e1a0d1 (diff) |
Configure ZooKeeper log file handler
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]); } |