Repository: logging-log4j2 Updated Branches: refs/heads/master 42c89a28e -> 7fe651d01
[LOG4J2-1578] RoutingAppender can be configured with scripts. Remove unused lvar. Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/9991bef3 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/9991bef3 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/9991bef3 Branch: refs/heads/master Commit: 9991bef3e8427df01cbccd68bb6ebf56457449b0 Parents: 42c89a2 Author: Gary Gregory <[email protected]> Authored: Wed Sep 14 12:24:31 2016 -0700 Committer: Gary Gregory <[email protected]> Committed: Wed Sep 14 12:24:31 2016 -0700 ---------------------------------------------------------------------- .../log4j/core/appender/routing/Routes.java | 443 +++++++++---------- 1 file changed, 221 insertions(+), 222 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9991bef3/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/Routes.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/Routes.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/Routes.java index 060fc9b..4a62542 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/Routes.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/Routes.java @@ -1,222 +1,221 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache license, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the license for the specific language governing permissions and - * limitations under the license. - */ -package org.apache.logging.log4j.core.appender.routing; - -import java.util.Objects; - -import javax.script.Bindings; - -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.config.Configuration; -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.PluginBuilderFactory; -import org.apache.logging.log4j.core.config.plugins.PluginConfiguration; -import org.apache.logging.log4j.core.config.plugins.PluginElement; -import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required; -import org.apache.logging.log4j.core.script.AbstractScript; -import org.apache.logging.log4j.core.script.ScriptManager; -import org.apache.logging.log4j.status.StatusLogger; - -/** - * Contains the individual Route elements. - */ -@Plugin(name = "Routes", category = "Core", printObject = true) -public final class Routes { - - public static class Builder implements org.apache.logging.log4j.core.util.Builder<Routes> { - - @PluginConfiguration - private Configuration configuration; - - @PluginAttribute("pattern") - private String pattern; - - @PluginElement("Script") - private AbstractScript patternScript; - - @PluginElement("Routes") - @Required - private Route[] routes; - - @Override - public Routes build() { - if (routes == null || routes.length == 0) { - LOGGER.error("No Routes configured."); - return null; - } - if (patternScript != null && pattern != null) { - LOGGER.warn("In a Routes element, you must configure either a Script element or a pattern attribute."); - } - Bindings bindings = null; - if (patternScript != null) { - if (configuration == null) { - LOGGER.error("No Configuration defined for Routes; required for Script"); - } else { - configuration.getScriptManager().addScript(patternScript); - } - } - return new Routes(configuration, patternScript, pattern, routes); - } - - public Configuration getConfiguration() { - return configuration; - } - - public String getPattern() { - return pattern; - } - - public AbstractScript getPatternScript() { - return patternScript; - } - - public Route[] getRoutes() { - return routes; - } - - public Builder withConfiguration(@SuppressWarnings("hiding") final Configuration configuration) { - this.configuration = configuration; - return this; - } - - public Builder withPattern(@SuppressWarnings("hiding") final String pattern) { - this.pattern = pattern; - return this; - } - - public Builder withPatternScript(@SuppressWarnings("hiding") final AbstractScript patternScript) { - this.patternScript = patternScript; - return this; - } - - public Builder withRoutes(@SuppressWarnings("hiding") final Route[] routes) { - this.routes = routes; - return this; - } - - } - - private static final Logger LOGGER = StatusLogger.getLogger(); - - /** - * Creates the Routes. - * @param pattern The pattern. - * @param routes An array of Route elements. - * @return The Routes container. - * @deprecated since 2.7; use {@link #newBuilder()}. - */ - @Deprecated - public static Routes createRoutes( - final String pattern, - final Route... routes) { - if (routes == null || routes.length == 0) { - LOGGER.error("No routes configured"); - return null; - } - return new Routes(null, null, pattern, routes); - } - - @PluginBuilderFactory - public static Builder newBuilder() { - return new Builder(); - } - - private Bindings bindings; - - private final Configuration configuration; - - private final String pattern; - - private final AbstractScript patternScript; - - // TODO Why not make this a Map or add a Map. - private final Route[] routes; - - private Routes(final Configuration configuration, final AbstractScript patternScript, final String pattern, final Route... routes) { - this.configuration = configuration; - this.patternScript = patternScript; - this.pattern = pattern; - this.routes = routes; - } - - public Bindings getBindings() { - return bindings; - } - - /** - * Returns the pattern. - * @return the pattern. - */ - public String getPattern() { - if (patternScript != null) { - final ScriptManager scriptManager = configuration.getScriptManager(); - if (bindings == null) { - bindings = scriptManager.createBindings(patternScript); - } - final Object object = scriptManager.execute(patternScript.getName(), bindings); - return Objects.toString(object, null); - } - return pattern; - } - - /** - * Gets the optional script that decides which route to pick. - * @return the optional script that decides which route to pick. May be null. - */ - public AbstractScript getPatternScript() { - return patternScript; - } - - public Route getRoute(final String key) { - for (final Route route : routes) { - if (Objects.equals(route.getKey(), key)) { - return route; - } - } - return null; - } - - /** - * Returns the array of Route elements. - * @return an array of Route elements. - */ - public Route[] getRoutes() { - return routes; - } - - public void setBindings(final Bindings bindings) { - this.bindings = bindings; - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder("{"); - boolean first = true; - for (final Route route : routes) { - if (!first) { - sb.append(','); - } - first = false; - sb.append(route.toString()); - } - sb.append('}'); - return sb.toString(); - - } - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ +package org.apache.logging.log4j.core.appender.routing; + +import java.util.Objects; + +import javax.script.Bindings; + +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.config.Configuration; +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.PluginBuilderFactory; +import org.apache.logging.log4j.core.config.plugins.PluginConfiguration; +import org.apache.logging.log4j.core.config.plugins.PluginElement; +import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required; +import org.apache.logging.log4j.core.script.AbstractScript; +import org.apache.logging.log4j.core.script.ScriptManager; +import org.apache.logging.log4j.status.StatusLogger; + +/** + * Contains the individual Route elements. + */ +@Plugin(name = "Routes", category = "Core", printObject = true) +public final class Routes { + + public static class Builder implements org.apache.logging.log4j.core.util.Builder<Routes> { + + @PluginConfiguration + private Configuration configuration; + + @PluginAttribute("pattern") + private String pattern; + + @PluginElement("Script") + private AbstractScript patternScript; + + @PluginElement("Routes") + @Required + private Route[] routes; + + @Override + public Routes build() { + if (routes == null || routes.length == 0) { + LOGGER.error("No Routes configured."); + return null; + } + if (patternScript != null && pattern != null) { + LOGGER.warn("In a Routes element, you must configure either a Script element or a pattern attribute."); + } + if (patternScript != null) { + if (configuration == null) { + LOGGER.error("No Configuration defined for Routes; required for Script"); + } else { + configuration.getScriptManager().addScript(patternScript); + } + } + return new Routes(configuration, patternScript, pattern, routes); + } + + public Configuration getConfiguration() { + return configuration; + } + + public String getPattern() { + return pattern; + } + + public AbstractScript getPatternScript() { + return patternScript; + } + + public Route[] getRoutes() { + return routes; + } + + public Builder withConfiguration(@SuppressWarnings("hiding") final Configuration configuration) { + this.configuration = configuration; + return this; + } + + public Builder withPattern(@SuppressWarnings("hiding") final String pattern) { + this.pattern = pattern; + return this; + } + + public Builder withPatternScript(@SuppressWarnings("hiding") final AbstractScript patternScript) { + this.patternScript = patternScript; + return this; + } + + public Builder withRoutes(@SuppressWarnings("hiding") final Route[] routes) { + this.routes = routes; + return this; + } + + } + + private static final Logger LOGGER = StatusLogger.getLogger(); + + /** + * Creates the Routes. + * @param pattern The pattern. + * @param routes An array of Route elements. + * @return The Routes container. + * @deprecated since 2.7; use {@link #newBuilder()}. + */ + @Deprecated + public static Routes createRoutes( + final String pattern, + final Route... routes) { + if (routes == null || routes.length == 0) { + LOGGER.error("No routes configured"); + return null; + } + return new Routes(null, null, pattern, routes); + } + + @PluginBuilderFactory + public static Builder newBuilder() { + return new Builder(); + } + + private Bindings bindings; + + private final Configuration configuration; + + private final String pattern; + + private final AbstractScript patternScript; + + // TODO Why not make this a Map or add a Map. + private final Route[] routes; + + private Routes(final Configuration configuration, final AbstractScript patternScript, final String pattern, final Route... routes) { + this.configuration = configuration; + this.patternScript = patternScript; + this.pattern = pattern; + this.routes = routes; + } + + public Bindings getBindings() { + return bindings; + } + + /** + * Returns the pattern. + * @return the pattern. + */ + public String getPattern() { + if (patternScript != null) { + final ScriptManager scriptManager = configuration.getScriptManager(); + if (bindings == null) { + bindings = scriptManager.createBindings(patternScript); + } + final Object object = scriptManager.execute(patternScript.getName(), bindings); + return Objects.toString(object, null); + } + return pattern; + } + + /** + * Gets the optional script that decides which route to pick. + * @return the optional script that decides which route to pick. May be null. + */ + public AbstractScript getPatternScript() { + return patternScript; + } + + public Route getRoute(final String key) { + for (final Route route : routes) { + if (Objects.equals(route.getKey(), key)) { + return route; + } + } + return null; + } + + /** + * Returns the array of Route elements. + * @return an array of Route elements. + */ + public Route[] getRoutes() { + return routes; + } + + public void setBindings(final Bindings bindings) { + this.bindings = bindings; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + boolean first = true; + for (final Route route : routes) { + if (!first) { + sb.append(','); + } + first = false; + sb.append(route.toString()); + } + sb.append('}'); + return sb.toString(); + + } + +}
