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>