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