Repository: logging-log4j2
Updated Branches:
  refs/heads/master 977095f72 -> 0a79e2689


[LOG4J2-1608] ServletAppender does not provide throwable object to
ServletContext. Add appender option logThrowables; defaults to false to
preserve previous behavior.

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

Branch: refs/heads/master
Commit: 0a79e2689c6e1bcef446cc9422b8703db79c3148
Parents: 977095f
Author: Gary Gregory <ggreg...@apache.org>
Authored: Thu Sep 22 13:53:16 2016 -0700
Committer: Gary Gregory <ggreg...@apache.org>
Committed: Thu Sep 22 13:53:16 2016 -0700

----------------------------------------------------------------------
 .../log4j/web/appender/ServletAppender.java     | 42 ++++++++++++++++----
 .../resources/WEB-INF/classes/log4j-servlet.xml |  2 +-
 2 files changed, 35 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0a79e268/log4j-web/src/main/java/org/apache/logging/log4j/web/appender/ServletAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-web/src/main/java/org/apache/logging/log4j/web/appender/ServletAppender.java
 
b/log4j-web/src/main/java/org/apache/logging/log4j/web/appender/ServletAppender.java
index 1a592c2..8721de1 100644
--- 
a/log4j-web/src/main/java/org/apache/logging/log4j/web/appender/ServletAppender.java
+++ 
b/log4j-web/src/main/java/org/apache/logging/log4j/web/appender/ServletAppender.java
@@ -25,6 +25,7 @@ import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.appender.AbstractAppender;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
 import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
 import org.apache.logging.log4j.core.layout.AbstractStringLayout;
 import org.apache.logging.log4j.core.layout.PatternLayout;
@@ -39,6 +40,9 @@ public class ServletAppender extends AbstractAppender {
        public static class Builder<B extends Builder<B>> extends 
AbstractAppender.Builder<B>
                        implements 
org.apache.logging.log4j.core.util.Builder<ServletAppender> {
 
+        @PluginBuilderAttribute
+        private boolean logThrowables;
+
                @Override
                public ServletAppender build() {
                        final String name = getName();
@@ -57,9 +61,25 @@ public class ServletAppender extends AbstractAppender {
                                LOGGER.error("Layout must be a StringLayout to 
log to ServletContext");
                                return null;
                        }
-                       return new ServletAppender(name, layout, getFilter(), 
servletContext, isIgnoreExceptions());
+                       return new ServletAppender(name, layout, getFilter(), 
servletContext, isIgnoreExceptions(), logThrowables);
                }
 
+        /**
+         * Logs with {@link ServletContext#log(String, Throwable)} if true and 
with {@link ServletContext#log(String)} if false.
+         * 
+         * @return whether to log a Throwable with the servlet context.
+         */
+        public boolean isLogThrowables() {
+            return logThrowables;
+        }
+
+        /**
+         * Logs with {@link ServletContext#log(String, Throwable)} if true and 
with {@link ServletContext#log(String)} if false.
+         */
+        public void setLogThrowables(boolean logThrowables) {
+            this.logThrowables = logThrowables;
+        }
+
        }
     
     @PluginBuilderFactory
@@ -68,17 +88,23 @@ public class ServletAppender extends AbstractAppender {
     }
 
     private final ServletContext servletContext;
-
+    private boolean logThrowables;
     
-       private ServletAppender(final String name, final Layout<? extends 
Serializable> layout, final Filter filter,
-                       final ServletContext servletContext, final boolean 
ignoreExceptions) {
-               super(name, filter, layout, ignoreExceptions);
-               this.servletContext = servletContext;
-       }
+    private ServletAppender(final String name, final Layout<? extends 
Serializable> layout, final Filter filter,
+            final ServletContext servletContext, final boolean 
ignoreExceptions, final boolean logThrowables) {
+        super(name, filter, layout, ignoreExceptions);
+        this.servletContext = servletContext;
+        this.logThrowables = logThrowables;
+    }
 
     @Override
     public void append(final LogEvent event) {
-        servletContext.log(((AbstractStringLayout) 
getLayout()).toSerializable(event), event.getThrown());
+        final String serialized = ((AbstractStringLayout) 
getLayout()).toSerializable(event);
+        if (logThrowables) {
+            servletContext.log(serialized, event.getThrown());
+        } else {
+            servletContext.log(serialized);
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0a79e268/log4j-web/src/test/resources/WEB-INF/classes/log4j-servlet.xml
----------------------------------------------------------------------
diff --git a/log4j-web/src/test/resources/WEB-INF/classes/log4j-servlet.xml 
b/log4j-web/src/test/resources/WEB-INF/classes/log4j-servlet.xml
index 017169c..220508b 100644
--- a/log4j-web/src/test/resources/WEB-INF/classes/log4j-servlet.xml
+++ b/log4j-web/src/test/resources/WEB-INF/classes/log4j-servlet.xml
@@ -19,7 +19,7 @@
 <Configuration status="WARN" name="ServletTest">
 
     <Appenders>
-        <Servlet name="Servlet">
+        <Servlet name="Servlet" logThrowables="true">
             <PatternLayout pattern="%m%n%ex{none}"/>
         </Servlet>
     </Appenders>

Reply via email to