/* * 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 _DECAF_UTIL_LOGGING_HANDLER_H_ #define _DECAF_UTIL_LOGGING_HANDLER_H_ #include #include #include #include #include #include namespace decaf{ namespace util{ namespace logging{ class Filter; class Formatter; class ErrorManager; /** * A Handler object takes log messages from a Logger and exports them. * It might for example, write them to a console or write them to a file, * or send them to a network logging service, or forward them to an OS * log, or whatever. * * A Handler can be disabled by doing a setLevel(Level.OFF) and can be * re-enabled by doing a setLevel with an appropriate level. * * Handler classes typically use LogManager properties to set default * values for the Handler's Filter, Formatter, and Level. See the * specific documentation for each concrete Handler class. */ class DECAF_API Handler : public io::Closeable { private: // Formats this Handlers output Formatter* formatter; // Filter object for Log Filtering Filter* filter; // ErrorManager instance for this Handler ErrorManager* errorManager; // Level at which that this Handler will start logging. Level level; // Name of this class used to read properties std::string prefix; private: Handler( const Handler& ); Handler& operator= ( const Handler& ); public: Handler(); virtual ~Handler(); /** * Flush the Handler's output, clears any buffers. */ virtual void flush() = 0; /** * Publish the Log Record to this Handler * @param record The Log Record to Publish */ virtual void publish( const LogRecord& record ) = 0; /** * Check if this Handler would actually log a given LogRecord. *

* This method checks if the LogRecord has an appropriate Level and * whether it satisfies any Filter. It also may make other Handler * specific checks that might prevent a handler from logging the * LogRecord. * @param record LogRecord to check */ virtual bool isLoggable( const LogRecord& record ) const; /** * Sets the Filter that this Handler uses to filter Log Records * * For each call of publish the Handler will call this Filter (if it * is non-null) to check if the LogRecord should be published or * discarded. * * @param filter Filter derived instance */ virtual void setFilter( Filter* filter ) { this->filter = filter; } /** * Gets the Filter that this Handler uses to filter Log Records * @returns Filter derived instance */ virtual Filter* getFilter() { return this->filter; } /** * Set the log level specifying which message levels will be logged * by this Handler. *

* The intention is to allow developers to turn on voluminous logging, * but to limit the messages that are sent to certain Handlers. * @param value Level enumeration value */ virtual void setLevel( const Level& value ) { this->level = value; } /** * Get the log level specifying which message levels will be logged * by this Handler. * @returns Level enumeration value */ virtual Level getLevel() { return this->level; } /** * Sets the Formatter used by this Handler *

* Some Handlers may not use Formatters, in which case the * Formatter will be remembered, but not used. * @param formatter Filter derived instance */ virtual void setFormatter( Formatter* formatter ); /** * Gets the Formatter used by this Handler * @returns Filter derived instance */ virtual Formatter* getFormatter() { return this->formatter; } /** * Sets the Formatter used by this Handler *

* The ErrorManager's "error" method will be invoked if any errors occur while * using this Handler. * * @param errorManager ErrorManager derived instance */ virtual void setErrorManager( ErrorManager* errorManager ); /** * Gets the ErrorManager used by this Handler. * @returns ErrorManager derived pointer or NULL. */ virtual ErrorManager* getErrorManager() { return this->errorManager; } protected: /** * Protected convenience method to report an error to this Handler's ErrorManager. * * @param message - a descriptive string (may be empty) * @param ex - an exception (may be NULL) * @param code - an error code defined in ErrorManager */ void reportError( const std::string& message, decaf::lang::Exception* ex, int code ); }; }}} #endif /*_DECAF_UTIL_LOGGING_HANDLER_H_*/