1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 #ifndef _LOG4CXX_HELPERS_ONLY_ONCE_ERROR_HANDLER_H 19 #define _LOG4CXX_HELPERS_ONLY_ONCE_ERROR_HANDLER_H 20 21 #include <log4cxx/spi/errorhandler.h> 22 #include <log4cxx/helpers/objectimpl.h> 23 24 #ifdef _MSC_VER 25 #pragma warning ( push ) 26 #pragma warning (disable : 4251) // ::std::exception needs to have dll-interface 27 #endif 28 29 namespace log4cxx 30 { 31 namespace helpers 32 { 33 /** 34 The <code>OnlyOnceErrorHandler</code> implements log4cxx's default 35 error handling policy which consists of emitting a message for the 36 first error in an appender and ignoring all following errors. 37 38 <p>The error message is printed on <code>System.err</code>. 39 40 <p>This policy aims at protecting an otherwise working application 41 from being flooded with error messages when logging fails 42 */ 43 class LOG4CXX_EXPORT OnlyOnceErrorHandler : 44 public virtual spi::ErrorHandler, 45 public virtual ObjectImpl 46 { 47 private: 48 LogString WARN_PREFIX; 49 LogString ERROR_PREFIX; 50 mutable bool firstTime; 51 52 public: 53 DECLARE_LOG4CXX_OBJECT(OnlyOnceErrorHandler) 54 BEGIN_LOG4CXX_CAST_MAP() 55 LOG4CXX_CAST_ENTRY(spi::OptionHandler) 56 LOG4CXX_CAST_ENTRY(spi::ErrorHandler) 57 END_LOG4CXX_CAST_MAP() 58 59 OnlyOnceErrorHandler(); 60 void addRef() const; 61 void releaseRef() const; 62 63 /** 64 Does not do anything. 65 */ 66 void setLogger(const LoggerPtr& logger); 67 68 69 /** 70 No options to activate. 71 */ 72 void activateOptions(log4cxx::helpers::Pool& p); 73 void setOption(const LogString& option, const LogString& value); 74 75 76 /** 77 Prints the message and the stack trace of the exception on 78 <code>System.err</code>. */ 79 void error(const LogString& message, const std::exception& e, 80 int errorCode) const; 81 /** 82 Prints the message and the stack trace of the exception on 83 <code>System.err</code>. 84 */ 85 void error(const LogString& message, const std::exception& e, 86 int errorCode, const spi::LoggingEventPtr& event) const; 87 88 /** 89 Print a the error message passed as parameter on 90 <code>System.err</code>. 91 */ 92 void error(const LogString& message) const; 93 94 /** 95 Does not do anything. 96 */ 97 void setAppender(const AppenderPtr& appender); 98 99 /** 100 Does not do anything. 101 */ 102 void setBackupAppender(const AppenderPtr& appender); 103 }; 104 } // namespace helpers 105 } // namespace log4cxx 106 107 #if defined(_MSC_VER) 108 #pragma warning (pop) 109 #endif 110 111 #endif //_LOG4CXX_HELPERS_ONLY_ONCE_ERROR_HANDLER_H 112 113