/* * 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 org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.Core; import org.apache.logging.log4j.core.config.Node; 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.PluginFactory; import org.apache.logging.log4j.core.config.plugins.PluginNode; import org.apache.logging.log4j.status.StatusLogger; /** * A Route to an appender. */ @Plugin(name = "Route", category = Core.CATEGORY_NAME, printObject = true, deferChildren = true) public final class Route { private static final Logger LOGGER = StatusLogger.getLogger(); private final Node node; private final String appenderRef; private final String key; private Route(final Node node, final String appenderRef, final String key) { this.node = node; this.appenderRef = appenderRef; this.key = key; } /** * Returns the Dynamic Appender Node. * @return The Node. */ public Node getNode() { return node; } /** * Returns the appender reference. * @return The Appender reference. */ public String getAppenderRef() { return appenderRef; } /** * Returns the key for this Route. * @return the key for this Route. */ public String getKey() { return key; } @Override public String toString() { final StringBuilder sb = new StringBuilder("Route("); sb.append("type="); if (appenderRef != null) { sb.append("static Reference=").append(appenderRef); } else if (node != null) { sb.append("dynamic - type=").append(node.getName()); } else { sb.append("invalid Route"); } if (key != null) { sb.append(" key='").append(key).append('\''); } else { sb.append(" default"); } sb.append(')'); return sb.toString(); } /** * Create the Route. * @param appenderRef The Appender reference. * @param key The key. * @param node The Node. * @return A Route. */ @PluginFactory public static Route createRoute( @PluginAttribute("ref") final String appenderRef, @PluginAttribute("key") final String key, @PluginNode final Node node) { if (node != null && node.hasChildren()) { if (appenderRef != null) { LOGGER.error("A route cannot be configured with an appender reference and an appender definition"); return null; } } else { if (appenderRef == null) { LOGGER.error("A route must specify an appender reference or an appender definition"); return null; } } return new Route(node, appenderRef, key); } }