Repository: samza
Updated Branches:
  refs/heads/master 220cfce5c -> 0cdc31e5d


SAMZA-954: Improving startup logging for Samza


Project: http://git-wip-us.apache.org/repos/asf/samza/repo
Commit: http://git-wip-us.apache.org/repos/asf/samza/commit/0cdc31e5
Tree: http://git-wip-us.apache.org/repos/asf/samza/tree/0cdc31e5
Diff: http://git-wip-us.apache.org/repos/asf/samza/diff/0cdc31e5

Branch: refs/heads/master
Commit: 0cdc31e5d4720b78b6b763b83935bdbeb9f2c912
Parents: 220cfce
Author: Jacob Maes <[email protected]>
Authored: Mon Aug 1 11:48:17 2016 -0700
Committer: Yi Pan (Data Infrastructure) <[email protected]>
Committed: Mon Aug 1 11:48:17 2016 -0700

----------------------------------------------------------------------
 .../documentation/versioned/jobs/logging.md     | 18 ++++++++++
 .../apache/samza/container/SamzaContainer.scala |  7 ++--
 .../org/apache/samza/metrics/JmxServer.scala    |  4 +--
 .../scala/org/apache/samza/util/Logging.scala   | 12 +++++--
 samza-test/src/main/resources/log4j.xml         | 36 ++++++++++++++------
 5 files changed, 59 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/samza/blob/0cdc31e5/docs/learn/documentation/versioned/jobs/logging.md
----------------------------------------------------------------------
diff --git a/docs/learn/documentation/versioned/jobs/logging.md 
b/docs/learn/documentation/versioned/jobs/logging.md
index 0726d37..6d65984 100644
--- a/docs/learn/documentation/versioned/jobs/logging.md
+++ b/docs/learn/documentation/versioned/jobs/logging.md
@@ -77,6 +77,24 @@ These settings are very useful if you're using a file-based 
appender. For exampl
 
 Setting up a file-based appender is recommended as a better alternative to 
using standard out. Standard out log files (see below) don't roll, and can get 
quite large if used for logging.
 
+#### Startup logger
+When using a rolling file appender, it is common for a long-running job to 
exceed the max file size and count. In such cases, the beginning of the logs 
will be lost. Since the beginning of the logs include some of the most critical 
information like configuration, it is important to not lose this information. 
To address this issue, Samza logs this critical information to a "startup 
logger" in addition to the normal logger. You can write these log messages to a 
separate, finite file by including the following snippet in your log4j.xml: 
+
+{% highlight xml %}
+<appender name="StartupAppender" class="org.apache.log4j.RollingFileAppender">
+   <param name="File" 
value="${samza.log.dir}/${samza.container.name}-startup.log" />
+   <param name="MaxFileSize" value="256MB" />
+   <param name="MaxBackupIndex" value="1" />
+   <layout class="org.apache.log4j.PatternLayout">
+    <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] 
%c{1} [%p] %m%n" />
+   </layout>
+</appender>
+<logger name="STARTUP_LOGGER" additivity="false">
+   <level value="info" />
+   <appender-ref ref="StartupAppender"/>
+</logger>
+{% endhighlight %}
+
 #### Changing log levels
 
 Sometimes it's desirable to change the Log4J log level from `INFO` to `DEBUG` 
at runtime so that a developer can enable more logging for a Samza container 
that's exhibiting undesirable behavior. Samza provides a Log4j class called 
JmxAppender, which will allow you to dynamically modify log levels at runtime. 
The JmxAppender class is located in the samza-log4j package, and can be turned 
on by first adding a runtime dependency to the samza-log4j package:

http://git-wip-us.apache.org/repos/asf/samza/blob/0cdc31e5/samza-core/src/main/scala/org/apache/samza/container/SamzaContainer.scala
----------------------------------------------------------------------
diff --git 
a/samza-core/src/main/scala/org/apache/samza/container/SamzaContainer.scala 
b/samza-core/src/main/scala/org/apache/samza/container/SamzaContainer.scala
index a37f353..f786fc0 100644
--- a/samza-core/src/main/scala/org/apache/samza/container/SamzaContainer.scala
+++ b/samza-core/src/main/scala/org/apache/samza/container/SamzaContainer.scala
@@ -143,9 +143,10 @@ object SamzaContainer extends Logging {
     val containerPID = Util.getContainerPID
 
     info("Setting up Samza container: %s" format containerName)
-    info("Samza container PID: %s" format containerPID)
-    info("Using configuration: %s" format config)
-    info("Using container model: %s" format containerModel)
+
+    startupLog("Samza container PID: %s" format containerPID)
+    startupLog("Using configuration: %s" format config)
+    startupLog("Using container model: %s" format containerModel)
 
     val registry = new MetricsRegistryMap(containerName)
     val samzaContainerMetrics = new SamzaContainerMetrics(containerName, 
registry)

http://git-wip-us.apache.org/repos/asf/samza/blob/0cdc31e5/samza-core/src/main/scala/org/apache/samza/metrics/JmxServer.scala
----------------------------------------------------------------------
diff --git a/samza-core/src/main/scala/org/apache/samza/metrics/JmxServer.scala 
b/samza-core/src/main/scala/org/apache/samza/metrics/JmxServer.scala
index ad00ca0..021ca77 100644
--- a/samza-core/src/main/scala/org/apache/samza/metrics/JmxServer.scala
+++ b/samza-core/src/main/scala/org/apache/samza/metrics/JmxServer.scala
@@ -99,8 +99,8 @@ class JmxServer(requestedPort: Int) extends Logging {
   }
 
   jmxServer.start
-  info("Started " + toString)
-  info("If you are tunneling, you might want to try " + 
toString.replaceAll("localhost", hostname))
+  startupLog("Started " + toString)
+  startupLog("If you are tunneling, you might want to try " + 
toString.replaceAll("localhost", hostname))
 
   /**
    * Get RMI registry port

http://git-wip-us.apache.org/repos/asf/samza/blob/0cdc31e5/samza-core/src/main/scala/org/apache/samza/util/Logging.scala
----------------------------------------------------------------------
diff --git a/samza-core/src/main/scala/org/apache/samza/util/Logging.scala 
b/samza-core/src/main/scala/org/apache/samza/util/Logging.scala
index 250de1e..9a4ed89 100644
--- a/samza-core/src/main/scala/org/apache/samza/util/Logging.scala
+++ b/samza-core/src/main/scala/org/apache/samza/util/Logging.scala
@@ -19,13 +19,21 @@
 
 package org.apache.samza.util
 
-import org.slf4j.LoggerFactory
-import org.slf4j.MDC
+import org.slf4j.{LoggerFactory, MDC}
 
 trait Logging {
   val loggerName = this.getClass.getName
   lazy val logger = LoggerFactory.getLogger(loggerName)
 
+  val startupLoggerName = "STARTUP_LOGGER"
+  lazy val startupLogger = LoggerFactory.getLogger(startupLoggerName)
+
+  def startupLog(message: => Any): Unit = {
+    logger.info(message)
+    startupLogger.info(message)
+  }
+
+
   def trace(message: => Any): Unit = {
     if (logger.isTraceEnabled()) {
       logger.trace(message.toString)

http://git-wip-us.apache.org/repos/asf/samza/blob/0cdc31e5/samza-test/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/samza-test/src/main/resources/log4j.xml 
b/samza-test/src/main/resources/log4j.xml
index 29345f3..7b4fb82 100644
--- a/samza-test/src/main/resources/log4j.xml
+++ b/samza-test/src/main/resources/log4j.xml
@@ -12,13 +12,23 @@
 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 
 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
-    <appender name="RollingAppender" 
class="org.apache.log4j.RollingFileAppender">
-        <param name="File" 
value="${samza.log.dir}/${samza.container.name}.log" />
-        <param name="DatePattern" value="'.'yyyy-MM-dd" />
-        <layout class="org.apache.log4j.PatternLayout">
-            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} 
[%t] %c{1} [%p] %m%n" />
-        </layout>
-    </appender>
+  <appender name="RollingAppender" 
class="org.apache.log4j.RollingFileAppender">
+    <param name="File" value="${samza.log.dir}/${samza.container.name}.log" />
+    <param name="MaxFileSize" value="256MB" />
+    <param name="MaxBackupIndex" value="20" />
+    <layout class="org.apache.log4j.PatternLayout">
+        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} 
[%t] %c{1} [%p] %m%n" />
+    </layout>
+  </appender>
+
+  <appender name="StartupAppender" 
class="org.apache.log4j.RollingFileAppender">
+    <param name="File" 
value="${samza.log.dir}/${samza.container.name}-startup.log" />
+    <param name="MaxFileSize" value="256MB" />
+    <param name="MaxBackupIndex" value="1" />
+    <layout class="org.apache.log4j.PatternLayout">
+      <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] 
%c{1} [%p] %m%n" />
+    </layout>
+  </appender>
 
   <appender name="console" class="org.apache.log4j.ConsoleAppender">
     <param name="Target" value="System.out" />
@@ -27,14 +37,18 @@
     </layout>
   </appender>
 
-  <logger name="org.apache.hadoop">
-    <level value="off"/>
-  </logger>
-
   <root>
     <priority value="info" />
     <appender-ref ref="console" /> 
     <appender-ref ref="RollingAppender" />
   </root>
 
+  <logger name="STARTUP_LOGGER" additivity="false">
+    <level value="info" />
+    <appender-ref ref="StartupAppender"/>
+  </logger>
+
+  <logger name="org.apache.hadoop">
+    <level value="off"/>
+  </logger>
 </log4j:configuration>

Reply via email to