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.log4j;
018    
019    import org.apache.log4j.spi.ErrorHandler;
020    import org.apache.log4j.spi.Filter;
021    import org.apache.log4j.spi.LoggingEvent;
022    
023    /**
024     * Implement this interface for your own strategies for outputting log
025     * statements.
026     */
027    public interface Appender {
028    
029        /**
030         * Add a filter to the end of the filter list.
031         * @param newFilter The filter to add.
032         *
033         * @since 0.9.0
034         */
035        void addFilter(Filter newFilter);
036    
037        /**
038         * Returns the head Filter. The Filters are organized in a linked list
039         * and so all Filters on this Appender are available through the result.
040         *
041         * @return the head Filter or null, if no Filters are present
042         * @since 1.1
043         */
044        Filter getFilter();
045    
046        /**
047         * Clear the list of filters by removing all the filters in it.
048         *
049         * @since 0.9.0
050         */
051        void clearFilters();
052    
053        /**
054         * Release any resources allocated within the appender such as file
055         * handles, network connections, etc.
056         * <p>
057         * It is a programming error to append to a closed appender.
058         * </p>
059         *
060         * @since 0.8.4
061         */
062        void close();
063    
064        /**
065         * Log in <code>Appender</code> specific way. When appropriate,
066         * Loggers will call the <code>doAppend</code> method of appender
067         * implementations in order to log.
068         * @param event The LoggingEvent.
069         */
070        void doAppend(LoggingEvent event);
071    
072    
073        /**
074         * Get the name of this appender.
075         *
076         * @return name, may be null.
077         */
078        String getName();
079    
080    
081        /**
082         * Set the {@link ErrorHandler} for this appender.
083         * @param errorHandler The error handler.
084         *
085         * @since 0.9.0
086         */
087        void setErrorHandler(ErrorHandler errorHandler);
088    
089        /**
090         * Returns the {@link ErrorHandler} for this appender.
091         * @return The error handler.
092         *
093         * @since 1.1
094         */
095        ErrorHandler getErrorHandler();
096    
097        /**
098         * Set the {@link Layout} for this appender.
099         * @param layout The Layout.
100         *
101         * @since 0.8.1
102         */
103        void setLayout(Layout layout);
104    
105        /**
106         * Returns this appenders layout.
107         * @return the Layout.
108         *
109         * @since 1.1
110         */
111        Layout getLayout();
112    
113    
114        /**
115         * Set the name of this appender. The name is used by other
116         * components to identify this appender.
117         * @param name The appender name.
118         *
119         * @since 0.8.1
120         */
121        void setName(String name);
122    
123        /**
124         * Configurators call this method to determine if the appender
125         * requires a layout. If this method returns {@code true},
126         * meaning that layout is required, then the configurator will
127         * configure an layout using the configuration information at its
128         * disposal.  If this method returns {@code false}, meaning that
129         * a layout is not required, then layout configuration will be
130         * skipped even if there is available layout configuration
131         * information at the disposal of the configurator..
132         * <p>
133         * In the rather exceptional case, where the appender
134         * implementation admits a layout but can also work without it, then
135         * the appender should return {@code true}.
136         * </p>
137         * @return true if a Layout is required.
138         *
139         * @since 0.8.4
140         */
141        boolean requiresLayout();
142    }
143