10 #ifndef __PION_LOGGER_HEADER__ 11 #define __PION_LOGGER_HEADER__ 13 #include <pion/config.hpp> 16 #if defined(PION_USE_LOG4CXX) 22 #include <log4cxx/logger.h> 23 #include <log4cxx/logmanager.h> 26 #pragma warning(disable: 4231) // nonstandard extension used : 'extern' before template explicit instantiation 28 #include <log4cxx/basicconfigurator.h> 29 #include <log4cxx/propertyconfigurator.h> 36 #pragma comment(lib, "log4cxxd") 38 #pragma comment(lib, "log4cxx") 40 #pragma comment(lib, "odbc32") 44 typedef log4cxx::LoggerPtr logger;
45 typedef log4cxx::AppenderSkeleton log_appender;
46 typedef log_appender * log_appender_ptr;
49 #define PION_HAS_LOG_APPENDER 1 50 #define PION_LOG_CONFIG_BASIC log4cxx::BasicConfigurator::configure(); 51 #define PION_LOG_CONFIG(FILE) log4cxx::PropertyConfigurator::configure(FILE); 52 #define PION_GET_LOGGER(NAME) log4cxx::Logger::get_logger(NAME) 53 #define PION_SHUTDOWN_LOGGER log4cxx::LogManager::shutdown(); 55 #define PION_LOG_SETLEVEL_DEBUG(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::DEBUG_INT)); 56 #define PION_LOG_SETLEVEL_INFO(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::INFO_INT)); 57 #define PION_LOG_SETLEVEL_WARN(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::WARN_INT)); 58 #define PION_LOG_SETLEVEL_ERROR(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::ERROR_INT)); 59 #define PION_LOG_SETLEVEL_FATAL(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::FATAL_INT)); 60 #define PION_LOG_SETLEVEL_UP(LOG) LOG->setLevel(LOG->getLevel()->toInt()+1); 61 #define PION_LOG_SETLEVEL_DOWN(LOG) LOG->setLevel(LOG->getLevel()->toInt()-1); 63 #define PION_LOG_DEBUG LOG4CXX_DEBUG 64 #define PION_LOG_INFO LOG4CXX_INFO 65 #define PION_LOG_WARN LOG4CXX_WARN 66 #define PION_LOG_ERROR LOG4CXX_ERROR 67 #define PION_LOG_FATAL LOG4CXX_FATAL 69 #elif defined(PION_USE_LOG4CPLUS) 73 #include <log4cplus/logger.h> 74 #include <log4cplus/configurator.h> 75 #include <log4cplus/appender.h> 76 #include <log4cplus/spi/loggingevent.h> 77 #include <log4cplus/loglevel.h> 78 #include <log4cplus/loggingmacros.h> 80 #include <boost/circular_buffer.hpp> 81 #include <boost/thread/mutex.hpp> 83 #if defined(_MSC_VER) && !defined(PION_CMAKE_BUILD) 85 #if defined PION_STATIC_LINKING 86 #pragma comment(lib, "log4cplusSD") 88 #pragma comment(lib, "log4cplusD") 91 #if defined PION_STATIC_LINKING 92 #pragma comment(lib, "log4cplusS") 94 #pragma comment(lib, "log4cplus") 100 typedef log4cplus::Logger logger;
101 typedef log4cplus::Appender log_appender;
102 typedef log4cplus::SharedAppenderPtr log_appender_ptr;
107 class circular_buffer_appender :
public log4cplus::Appender
110 typedef boost::circular_buffer<log4cplus::spi::InternalLoggingEvent> LogEventBuffer;
113 circular_buffer_appender(
void) : m_log_events(1000) {};
114 virtual ~circular_buffer_appender() { destructorImpl(); }
117 const LogEventBuffer& getLogIterator()
const {
123 virtual void close() {}
125 virtual void append(
const log4cplus::spi::InternalLoggingEvent& event) {
126 boost::mutex::scoped_lock log_lock(m_log_mutex);
127 m_log_events.push_back(*event.clone());
132 LogEventBuffer m_log_events;
135 boost::mutex m_log_mutex;
139 #define PION_HAS_LOG_APPENDER 1 140 #define PION_LOG_CONFIG_BASIC log4cplus::BasicConfigurator::doConfigure(); 141 #define PION_LOG_CONFIG(FILE) log4cplus::PropertyConfigurator::doConfigure(FILE); 142 #define PION_GET_LOGGER(NAME) log4cplus::Logger::getInstance(NAME) 143 #define PION_SHUTDOWN_LOGGER log4cplus::Logger::shutdown(); 145 #define PION_LOG_SETLEVEL_DEBUG(LOG) LOG.setLogLevel(log4cplus::DEBUG_LOG_LEVEL); 146 #define PION_LOG_SETLEVEL_INFO(LOG) LOG.setLogLevel(log4cplus::INFO_LOG_LEVEL); 147 #define PION_LOG_SETLEVEL_WARN(LOG) LOG.setLogLevel(log4cplus::WARN_LOG_LEVEL); 148 #define PION_LOG_SETLEVEL_ERROR(LOG) LOG.setLogLevel(log4cplus::ERROR_LOG_LEVEL); 149 #define PION_LOG_SETLEVEL_FATAL(LOG) LOG.setLogLevel(log4cplus::FATAL_LOG_LEVEL); 150 #define PION_LOG_SETLEVEL_UP(LOG) LOG.setLogLevel(LOG.getLogLevel()+1); 151 #define PION_LOG_SETLEVEL_DOWN(LOG) LOG.setLogLevel(LOG.getLogLevel()-1); 153 #define PION_LOG_DEBUG LOG4CPLUS_DEBUG 154 #define PION_LOG_INFO LOG4CPLUS_INFO 155 #define PION_LOG_WARN LOG4CPLUS_WARN 156 #define PION_LOG_ERROR LOG4CPLUS_ERROR 157 #define PION_LOG_FATAL LOG4CPLUS_FATAL 160 #elif defined(PION_USE_LOG4CPP) 164 #include <log4cpp/Category.hh> 165 #include <log4cpp/BasicLayout.hh> 166 #include <log4cpp/OstreamAppender.hh> 167 #include <log4cpp/AppenderSkeleton.hh> 170 typedef log4cpp::Category* logger;
171 typedef log4cpp::AppenderSkeleton log_appender;
172 typedef log_appender * log_appender_ptr;
175 #define PION_HAS_LOG_APPENDER 1 176 #define PION_LOG_CONFIG_BASIC { log4cpp::OstreamAppender *app = new log4cpp::OstreamAppender("cout", &std::cout); app->setLayout(new log4cpp::BasicLayout()); log4cpp::Category::getRoot().setAppender(app); } 177 #define PION_LOG_CONFIG(FILE) { log4cpp::PropertyConfigurator::configure(FILE); } 178 #define PION_GET_LOGGER(NAME) (&log4cpp::Category::getInstance(NAME)) 179 #define PION_SHUTDOWN_LOGGER log4cpp::Category::shutdown(); 181 #define PION_LOG_SETLEVEL_DEBUG(LOG) { LOG->setPriority(log4cpp::Priority::DEBUG); } 182 #define PION_LOG_SETLEVEL_INFO(LOG) { LOG->setPriority(log4cpp::Priority::INFO); } 183 #define PION_LOG_SETLEVEL_WARN(LOG) { LOG->setPriority(log4cpp::Priority::WARN); } 184 #define PION_LOG_SETLEVEL_ERROR(LOG) { LOG->setPriority(log4cpp::Priority::ERROR); } 185 #define PION_LOG_SETLEVEL_FATAL(LOG) { LOG->setPriority(log4cpp::Priority::FATAL); } 186 #define PION_LOG_SETLEVEL_UP(LOG) { LOG->setPriority(LOG.getPriority()+1); } 187 #define PION_LOG_SETLEVEL_DOWN(LOG) { LOG->setPriority(LOG.getPriority()-1); } 189 #define PION_LOG_DEBUG(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::DEBUG) { LOG->debugStream() << MSG; } 190 #define PION_LOG_INFO(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::INFO) { LOG->infoStream() << MSG; } 191 #define PION_LOG_WARN(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::WARN) { LOG->warnStream() << MSG; } 192 #define PION_LOG_ERROR(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::ERROR) { LOG->errorStream() << MSG; } 193 #define PION_LOG_FATAL(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::FATAL) { LOG->fatalStream() << MSG; } 195 #elif defined(PION_DISABLE_LOGGING) 199 struct PION_API logger {
201 operator bool()
const {
return false; }
202 static void shutdown() {}
204 typedef int log_appender;
205 typedef log_appender * log_appender_ptr;
208 #undef PION_HAS_LOG_APPENDER 209 #define PION_LOG_CONFIG_BASIC {} 210 #define PION_LOG_CONFIG(FILE) {} 211 #define PION_GET_LOGGER(NAME) 0 212 #define PION_SHUTDOWN_LOGGER 0 215 #define PION_LOG_SETLEVEL_DEBUG(LOG) { if (LOG) {} } 216 #define PION_LOG_SETLEVEL_INFO(LOG) { if (LOG) {} } 217 #define PION_LOG_SETLEVEL_WARN(LOG) { if (LOG) {} } 218 #define PION_LOG_SETLEVEL_ERROR(LOG) { if (LOG) {} } 219 #define PION_LOG_SETLEVEL_FATAL(LOG) { if (LOG) {} } 220 #define PION_LOG_SETLEVEL_UP(LOG) { if (LOG) {} } 221 #define PION_LOG_SETLEVEL_DOWN(LOG) { if (LOG) {} } 223 #define PION_LOG_DEBUG(LOG, MSG) { if (LOG) {} } 224 #define PION_LOG_INFO(LOG, MSG) { if (LOG) {} } 225 #define PION_LOG_WARN(LOG, MSG) { if (LOG) {} } 226 #define PION_LOG_ERROR(LOG, MSG) { if (LOG) {} } 227 #define PION_LOG_FATAL(LOG, MSG) { if (LOG) {} } 230 #define PION_USE_OSTREAM_LOGGING 238 struct PION_API logger {
239 enum log_priority_type {
240 LOG_LEVEL_DEBUG, LOG_LEVEL_INFO, LOG_LEVEL_WARN,
241 LOG_LEVEL_ERROR, LOG_LEVEL_FATAL
244 logger(
void) : m_name(
"pion") {}
245 logger(
const std::string& name) : m_name(name) {}
246 logger(
const logger& p) : m_name(p.m_name) {}
247 static void shutdown() {}
249 static log_priority_type m_priority;
251 typedef int log_appender;
252 typedef log_appender * log_appender_ptr;
255 #undef PION_HAS_LOG_APPENDER 256 #define PION_LOG_CONFIG_BASIC {} 257 #define PION_LOG_CONFIG(FILE) {} 258 #define PION_GET_LOGGER(NAME) pion::logger(NAME) 259 #define PION_SHUTDOWN_LOGGER {} 261 #define PION_LOG_SETLEVEL_DEBUG(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_DEBUG; } 262 #define PION_LOG_SETLEVEL_INFO(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_INFO; } 263 #define PION_LOG_SETLEVEL_WARN(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_WARN; } 264 #define PION_LOG_SETLEVEL_ERROR(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_ERROR; } 265 #define PION_LOG_SETLEVEL_FATAL(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_FATAL; } 266 #define PION_LOG_SETLEVEL_UP(LOG) { ++LOG.m_priority; } 267 #define PION_LOG_SETLEVEL_DOWN(LOG) { --LOG.m_priority; } 269 #define PION_LOG_DEBUG(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_DEBUG) { std::cout << time(NULL) << " DEBUG " << LOG.m_name << ' ' << MSG << std::endl; } 270 #define PION_LOG_INFO(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_INFO) { std::cout << time(NULL) << " INFO " << LOG.m_name << ' ' << MSG << std::endl; } 271 #define PION_LOG_WARN(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_WARN) { std::cerr << time(NULL) << " WARN " << LOG.m_name << ' ' << MSG << std::endl; } 272 #define PION_LOG_ERROR(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_ERROR) { std::cerr << time(NULL) << " ERROR " << LOG.m_name << ' ' << MSG << std::endl; } 273 #define PION_LOG_FATAL(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_FATAL) { std::cerr << time(NULL) << " FATAL " << LOG.m_name << ' ' << MSG << std::endl; }