diff options
Diffstat (limited to 'src/main/include/log4cxx/appenderskeleton.h')
-rw-r--r-- | src/main/include/log4cxx/appenderskeleton.h | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/src/main/include/log4cxx/appenderskeleton.h b/src/main/include/log4cxx/appenderskeleton.h new file mode 100644 index 0000000..16242bd --- /dev/null +++ b/src/main/include/log4cxx/appenderskeleton.h @@ -0,0 +1,213 @@ +/* + * 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. + */ + +#ifndef _LOG4CXX_APPENDER_SKELETON_H +#define _LOG4CXX_APPENDER_SKELETON_H + +#if defined(_MSC_VER) +#pragma warning ( push ) +#pragma warning ( disable: 4231 4251 4275 4786 ) +#endif + + +#include <log4cxx/appender.h> +#include <log4cxx/layout.h> +#include <log4cxx/spi/errorhandler.h> +#include <log4cxx/spi/filter.h> +#include <log4cxx/helpers/objectimpl.h> +#include <log4cxx/helpers/mutex.h> +#include <log4cxx/helpers/pool.h> +#include <log4cxx/level.h> + + +namespace log4cxx +{ + /** + * Implementation base class for all appenders. + * + * This class provides the code for common functionality, such as + * support for threshold filtering and support for general filters. + * */ + class LOG4CXX_EXPORT AppenderSkeleton : + public virtual Appender, + public virtual helpers::ObjectImpl + { + protected: + /** The layout variable does not need to be set if the appender + implementation has its own layout. */ + LayoutPtr layout; + + /** Appenders are named. */ + LogString name; + + /** + There is no level threshold filtering by default. */ + LevelPtr threshold; + + /** + It is assumed and enforced that errorHandler is never null. + */ + spi::ErrorHandlerPtr errorHandler; + + /** The first filter in the filter chain. Set to <code>null</code> + initially. */ + spi::FilterPtr headFilter; + + /** The last filter in the filter chain. */ + spi::FilterPtr tailFilter; + + /** + Is this appender closed? + */ + bool closed; + + log4cxx::helpers::Pool pool; + log4cxx::helpers::Mutex mutex; + + public: + DECLARE_ABSTRACT_LOG4CXX_OBJECT(AppenderSkeleton) + BEGIN_LOG4CXX_CAST_MAP() + LOG4CXX_CAST_ENTRY(Appender) + LOG4CXX_CAST_ENTRY(spi::OptionHandler) + END_LOG4CXX_CAST_MAP() + + AppenderSkeleton(); + AppenderSkeleton(const LayoutPtr& layout); + + void addRef() const; + void releaseRef() const; + + /** + Finalize this appender by calling the derived class' + <code>close</code> method. + */ + void finalize(); + + /** + Derived appenders should override this method if option structure + requires it. + */ + virtual void activateOptions(log4cxx::helpers::Pool& /* pool */) {} + virtual void setOption(const LogString& option, const LogString& value); + + /** + Add a filter to end of the filter list. + */ + void addFilter(const spi::FilterPtr& newFilter) ; + + /** + Subclasses of <code>AppenderSkeleton</code> should implement this + method to perform actual logging. See also AppenderSkeleton::doAppend + method. + */ + protected: + virtual void append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& p) = 0; + + /** + Clear the filters chain. + */ + public: + void clearFilters(); + + /** + Return the currently set spi::ErrorHandler for this + Appender. + */ + const spi::ErrorHandlerPtr& getErrorHandler() const { return errorHandler; } + + /** + Returns the head Filter. + */ + spi::FilterPtr getFilter() const { return headFilter; } + + /** + Return the first filter in the filter chain for this + Appender. The return value may be <code>0</code> if no is + filter is set. + */ + const spi::FilterPtr& getFirstFilter() const { return headFilter; } + + /** + Returns the layout of this appender. The value may be 0. + */ + LayoutPtr getLayout() const { return layout; } + + + /** + Returns the name of this Appender. + */ + LogString getName() const { return name; } + + /** + Returns this appenders threshold level. See the #setThreshold + method for the meaning of this option. + */ + const LevelPtr& getThreshold() { return threshold; } + + /** + Check whether the message level is below the appender's + threshold. If there is no threshold set, then the return value is + always <code>true</code>. + */ + bool isAsSevereAsThreshold(const LevelPtr& level) const; + + + /** + * This method performs threshold checks and invokes filters before + * delegating actual logging to the subclasses specific + * AppenderSkeleton#append method. + * */ + void doAppend(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& pool); + + /** + Set the {@link spi::ErrorHandler ErrorHandler} for this Appender. + */ + void setErrorHandler(const spi::ErrorHandlerPtr& eh); + + /** + Set the layout for this appender. Note that some appenders have + their own (fixed) layouts or do not use one. For example, the + {@link net::SocketAppender SocketAppender} ignores the layout set + here. + */ + void setLayout(const LayoutPtr& layout1) { this->layout = layout1; } + + /** + Set the name of this Appender. + */ + void setName(const LogString& name1) { this->name.assign(name1); } + + + /** + Set the threshold level. All log events with lower level + than the threshold level are ignored by the appender. + + <p>In configuration files this option is specified by setting the + value of the <b>Threshold</b> option to a level + string, such as "DEBUG", "INFO" and so on. + */ + void setThreshold(const LevelPtr& threshold); + + }; // class AppenderSkeleton +} // namespace log4cxx + +#if defined(_MSC_VER) +#pragma warning ( pop ) +#endif + + +#endif //_LOG4CXX_APPENDER_SKELETON_H |