You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2016/09/22 20:25:27 UTC
logging-log4j2 git commit: [LOG4J2-1609] Add a Builder to
ServletAppender and deprecate factory method.
Repository: logging-log4j2
Updated Branches:
refs/heads/master 57825ccd1 -> 977095f72
[LOG4J2-1609] Add a Builder to ServletAppender and deprecate factory
method.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/977095f7
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/977095f7
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/977095f7
Branch: refs/heads/master
Commit: 977095f72b02afdadbc555371100b07c8825f90f
Parents: 57825cc
Author: Gary Gregory <gg...@apache.org>
Authored: Thu Sep 22 13:25:24 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Thu Sep 22 13:25:24 2016 -0700
----------------------------------------------------------------------
.../log4j/web/appender/ServletAppender.java | 80 +++++++++++++-------
src/changes/changes.xml | 5 +-
2 files changed, 56 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/977095f7/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 8bddc47..1a592c2 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
@@ -17,6 +17,7 @@
package org.apache.logging.log4j.web.appender;
import java.io.Serializable;
+
import javax.servlet.ServletContext;
import org.apache.logging.log4j.core.Filter;
@@ -24,10 +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.PluginAttribute;
-import org.apache.logging.log4j.core.config.plugins.PluginElement;
-import org.apache.logging.log4j.core.config.plugins.PluginFactory;
-import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
+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;
import org.apache.logging.log4j.web.WebLoggerContextUtils;
@@ -38,46 +36,72 @@ import org.apache.logging.log4j.web.WebLoggerContextUtils;
@Plugin(name = "Servlet", category = "Core", elementType = "appender", printObject = true)
public class ServletAppender extends AbstractAppender {
- private final ServletContext servletContext;
+ public static class Builder<B extends Builder<B>> extends AbstractAppender.Builder<B>
+ implements org.apache.logging.log4j.core.util.Builder<ServletAppender> {
+
+ @Override
+ public ServletAppender build() {
+ final String name = getName();
+ if (name == null) {
+ LOGGER.error("No name provided for ServletAppender");
+ }
+ final ServletContext servletContext = WebLoggerContextUtils.getServletContext();
+ if (servletContext == null) {
+ LOGGER.error("No servlet context is available");
+ return null;
+ }
+ Layout<? extends Serializable> layout = getLayout();
+ if (layout == null) {
+ layout = PatternLayout.createDefaultLayout();
+ } else if (!(layout instanceof AbstractStringLayout)) {
+ LOGGER.error("Layout must be a StringLayout to log to ServletContext");
+ return null;
+ }
+ return new ServletAppender(name, layout, getFilter(), servletContext, isIgnoreExceptions());
+ }
- private ServletAppender(final String name, final AbstractStringLayout layout, final Filter filter,
- final ServletContext servletContext, final boolean ignoreExceptions) {
- super(name, filter, layout, ignoreExceptions);
- this.servletContext = servletContext;
+ }
+
+ @PluginBuilderFactory
+ public static <B extends Builder<B>> B newBuilder() {
+ return new Builder<B>().asBuilder();
}
+ private final ServletContext servletContext;
+
+
+ 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;
+ }
+
@Override
public void append(final LogEvent event) {
servletContext.log(((AbstractStringLayout) getLayout()).toSerializable(event), event.getThrown());
}
/**
- * Create a Servlet Appender.
+ * Creates a Servlet Appender.
* @param layout The layout to use (required). Must extend {@link AbstractStringLayout}.
* @param filter The Filter or null.
* @param name The name of the Appender (required).
* @param ignoreExceptions If {@code true} (default) exceptions encountered when appending events are logged;
* otherwise they are propagated to the caller.
* @return The ServletAppender.
+ * @deprecated Use {@link #newBuilder()}.
*/
- @PluginFactory
- public static ServletAppender createAppender(
- @PluginElement("Layout") Layout<? extends Serializable> layout,
- @PluginElement("Filter") final Filter filter,
- @PluginAttribute("name") @Required(message = "No name provided for ServletAppender") final String name,
- @PluginAttribute(value = "ignoreExceptions", defaultBoolean = true) final boolean ignoreExceptions) {
- final ServletContext servletContext = WebLoggerContextUtils.getServletContext();
- if (servletContext == null) {
- LOGGER.error("No servlet context is available");
- return null;
- }
- if (layout == null) {
- layout = PatternLayout.createDefaultLayout();
- } else if (!(layout instanceof AbstractStringLayout)) {
- LOGGER.error("Layout must be a StringLayout to log to ServletContext");
- return null;
- }
- return new ServletAppender(name, (AbstractStringLayout) layout, filter, servletContext, ignoreExceptions);
+ @Deprecated
+ public static ServletAppender createAppender(Layout<? extends Serializable> layout, final Filter filter,
+ final String name, final boolean ignoreExceptions) {
+ // @formatter:off
+ return newBuilder()
+ .withFilter(filter)
+ .withIgnoreExceptions(ignoreExceptions)
+ .withLayout(layout)
+ .withName(name)
+ .build();
+ // @formatter:on
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/977095f7/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 7e69b6d..526853c 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -202,7 +202,10 @@
SocketAppender now supports IO buffering.
</action>
<action issue="LOG4J2-1557" dev="ggregory" type="add">
- Added a Builder for the SocketAppender (deprecates factory method).
+ Add a Builder for the SocketAppender (deprecates factory method).
+ </action>
+ <action issue="LOG4J2-1609" dev="ggregory" type="add">
+ Add a Builder to ServletAppender and deprecate factory method.
</action>
<action issue="LOG4J2-1553" dev="ggregory" type="add">
AbstractManager now implements AutoCloseable.