You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/04/06 19:51:25 UTC

[1/2] logging-log4j2 git commit: LOG4J2-1297 improved Configuration section, removed Socket Appender from supported list

Repository: logging-log4j2
Updated Branches:
  refs/heads/master b786b98c9 -> b60bf6f13


LOG4J2-1297 improved Configuration section, removed Socket Appender from supported list


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/8e775207
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/8e775207
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/8e775207

Branch: refs/heads/master
Commit: 8e775207091202de6b91143ad6c9421987e659ad
Parents: 23e6b06
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 02:50:51 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 02:50:51 2016 +0900

----------------------------------------------------------------------
 src/site/xdoc/manual/garbagefree.xml | 76 +++++++++++++++++++------------
 1 file changed, 47 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8e775207/src/site/xdoc/manual/garbagefree.xml
----------------------------------------------------------------------
diff --git a/src/site/xdoc/manual/garbagefree.xml b/src/site/xdoc/manual/garbagefree.xml
index 7154f38..8ec4755 100644
--- a/src/site/xdoc/manual/garbagefree.xml
+++ b/src/site/xdoc/manual/garbagefree.xml
@@ -79,6 +79,45 @@
 
       <a name="Enable" />
       <subsection name="Enabling Garbage-free Logging">
+        <a name="Config" />
+        <subsubsection name="Configuration">
+          <h4>Configuration</h4>
+          <p>
+            In Log4j 2.6, garbage-free logging is enabled by default, except in web applications.
+            Log4j will partially disable garbage-free logging if it detects that it is used in a web application
+            (when the <tt>javax.servlet.Servlet</tt> class is in the classpath,
+            or when system property <tt>log4j2.is.webapp</tt> is set to "true").
+            This is because garbage-free logging uses a number of ThreadLocal fields, which can cause
+            memory leaks when a thread pool of the web application server continues to hold references
+            to these fields after the web application is undeployed.
+          </p>
+          <p>
+            However, converting log events to text and text to bytes can be done without ThreadLocals,
+            so while logging is not completely garbage-free for web applications yet,
+            the pressure on the garbage collector can be significantly reduced.
+          </p>
+          <p>
+            There are two separate system properties for manually disabling the two mechanisms Log4j uses to avoid
+            creating temporary objects:
+          </p>
+          <ul>
+            <li><tt>log4j2.enable.threadlocals</tt> - if "true" (the default for non-web applications)
+              objects are stored in ThreadLocal fields and reused, otherwise new
+              objects are created for each log event</li>
+            <li><tt>log4j2.enable.direct.encoders</tt> - if "true" (the default) log events are converted to text and this
+              text is converted to bytes without creating temporary objects. Caution: multi-threaded applications
+              that use synchronous logging may see worse performance: the lock that was previously only around the
+              IO operation is widened to include the text formatting and conversion to bytes.
+              </li>
+          </ul>
+          <p>
+            Instead of system properties, the above properties can also be specified in a file named
+            <tt>log4j2.component.properties</tt> by including this file in the classpath of the application.
+          </p>
+          <table><tr><td><b>Caution:</b> as of version 2.6, a Log4j configuration containing a <tt>&lt;Properties&gt;</tt> section
+            will result in temporary objects being created during steady-state logging.
+          </td></tr></table>
+        </subsubsection>
         <a name="Appenders" />
         <subsubsection name="Supported Appenders">
           <h4>Supported Appenders</h4>
@@ -92,7 +131,6 @@
             <li>RandomAccessFile</li>
             <li>RollingRandomAccessFile (some temporary objects are created during file rollover)</li>
             <li>MemoryMappedFile</li>
-            <li>Socket</li>
           </ul>
           <p>
             Any other appenders not in the above list (including Async) create temporary objects during steady-state
@@ -108,7 +146,7 @@
             Format modifiers to control such things as field width, padding, left and right justification will not
             generate garbage.
           </p>
-          <table style="width: 60%">
+          <table style="width: 80%">
             <tr>
               <th>Conversion Pattern</th>
               <th>Description</th>
@@ -211,12 +249,13 @@
             </tr>
           </table>
           <p>
-            Logging Exceptions and stack traces will create temporary objects.
-          </p>
-          <p>
             Other PatternLayout conversion patterns, and other Layouts may be updated
             to avoid creating temporary objects in future releases. (Patches welcome!)
           </p>
+          <p>
+            We haven't figured out a way to log Exceptions and stack traces without creating temporary objects.
+            That is unfortunate, but you probably still want to log them when they happen.
+          </p>
           <table><tr><td><b>Caution:</b> patterns containing regular expressions and lookups for property substitution
             will result in temporary objects being created during steady-state logging.
             <p>
@@ -280,35 +319,14 @@ public void garbageFree() {
         <p>
         </p>
       </subsection>
-      <a name="Config" />
-      <subsubsection name="Configuration">
-        <h4>Configuration</h4>
-        <p>
-          In Log4j 2.6, garbage-free logging is enabled by default, except in web applications.
-          Log4j will disable garbage-free logging if it detects that it is used in a web application
-          (either when the <tt>javax.servlet.Servlet</tt> class
-          is in the classpath or when the <tt>log4j2.is.webapp</tt> system property is set to "true").
-          This is because garbage-free logging uses a number of ThreadLocal fields, which can cause
-          memory leaks when a thread pool of the web application server continues to hold references
-          to these fields after the web application is undeployed.
-        </p>
-        <p>
-          It is possible to manually disable garbage-free logging by setting system property
-          <tt>log4j2.enable.threadlocals</tt> to "false" before Log4j is initialized.
-        </p>
-        <p>
-          Instead of system properties, the above properties can also be specified in a file named
-          <tt>log4j2.component.properties</tt> by including this file in the classpath of the application.
-        </p>
-        <table><tr><td><b>Caution:</b> as of version 2.6, a Log4j configuration containing a <tt>&lt;Properties&gt;</tt> section
-          will result in temporary objects being created during steady-state logging.
-        </td></tr></table>
-      </subsubsection>
       <a name="Performance" />
       <subsection name="Performance">
 
         <a name="Latency" />
         <h4>TBD what to include here</h4>
+        <p>Async Loggers 2.5 vs 2.6 in garbage-free mode</p>
+        <p>Log4j 2.6 synchronous logging "classic" versus garbage-free mode - impact of adding threads</p>
+        <p>Comparison with other logging libraries?</p>
       </subsection>
       <a name="UnderTheHood" />
       <subsection name="Under the Hood">


[2/2] logging-log4j2 git commit: Merge remote-tracking branch 'origin/master'

Posted by rp...@apache.org.
Merge remote-tracking branch 'origin/master'


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/b60bf6f1
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/b60bf6f1
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/b60bf6f1

Branch: refs/heads/master
Commit: b60bf6f139c0857728cec7c6311a0666ddb82982
Parents: 8e77520 b786b98
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 02:51:14 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 02:51:14 2016 +0900

----------------------------------------------------------------------
 .../java/org/apache/logging/log4j/core/util/WatchManager.java  | 6 +++++-
 pom.xml                                                        | 2 +-
 src/changes/changes.xml                                        | 6 ++++++
 3 files changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------