001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements. See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache license, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License. You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the license for the specific language governing permissions and
015     * limitations under the license.
016     */
017    package org.apache.logging.log4j.core.config;
018    
019    import java.util.Locale;
020    
021    import org.apache.logging.log4j.Level;
022    import org.apache.logging.log4j.Logger;
023    import org.apache.logging.log4j.core.Filter;
024    import org.apache.logging.log4j.core.config.plugins.Plugin;
025    import org.apache.logging.log4j.core.config.plugins.PluginAttr;
026    import org.apache.logging.log4j.core.config.plugins.PluginElement;
027    import org.apache.logging.log4j.core.config.plugins.PluginFactory;
028    import org.apache.logging.log4j.status.StatusLogger;
029    
030    /**
031     * An Appender reference.
032     */
033    @Plugin(name = "appender-ref", type = "Core", printObject = true)
034    public final class AppenderRef {
035        private static final Logger LOGGER = StatusLogger.getLogger();
036    
037        private final String ref;
038        private final Level level;
039        private final Filter filter;
040    
041        private AppenderRef(String ref, Level level, Filter filter) {
042            this.ref = ref;
043            this.level = level;
044            this.filter = filter;
045        }
046    
047        public String getRef() {
048            return ref;
049        }
050    
051        public Level getLevel() {
052            return level;
053        }
054    
055        public Filter getFilter() {
056            return filter;
057        }
058    
059        /**
060         * Create an Appender reference.
061         * @param ref The name of the Appender.
062         * @param levelName The Level to filter against.
063         * @param filter The filter(s) to use.
064         * @return The name of the Appender.
065         */
066        @PluginFactory
067        public static AppenderRef createAppenderRef(@PluginAttr("ref") String ref,
068                                                    @PluginAttr("level") String levelName,
069                                                    @PluginElement("filters") Filter filter) {
070    
071            if (ref == null) {
072                LOGGER.error("Appender references must contain a reference");
073                return null;
074            }
075            Level level = null;
076    
077            if (levelName != null) {
078                level = Level.toLevel(levelName, null);
079                if (level == null) {
080                    LOGGER.error("Invalid level " + levelName + " on Appender reference " + ref);
081                }
082            }
083    
084            return new AppenderRef(ref, level, filter);
085        }
086    }