00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __PION_PIONLOGGER_HEADER__
00011 #define __PION_PIONLOGGER_HEADER__
00012
00013 #include <pion/PionConfig.hpp>
00014
00015
00016 #if defined(PION_USE_LOG4CXX)
00017
00018
00019
00020
00021
00022 #include <log4cxx/logger.h>
00023 #ifdef _MSC_VER
00024 #pragma warning(push)
00025 #pragma warning(disable: 4231) // nonstandard extension used : 'extern' before template explicit instantiation
00026 #endif
00027 #include <log4cxx/basicconfigurator.h>
00028 #include <log4cxx/propertyconfigurator.h>
00029 #ifdef _MSC_VER
00030 #pragma warning(pop)
00031 #endif
00032
00033 #if defined _MSC_VER
00034 #if defined _DEBUG
00035 #pragma comment(lib, "log4cxxd")
00036 #else
00037 #pragma comment(lib, "log4cxx")
00038 #endif
00039 #pragma comment(lib, "odbc32")
00040 #endif
00041
00042 namespace pion {
00043 typedef log4cxx::LoggerPtr PionLogger;
00044 }
00045
00046 #define PION_LOG_CONFIG_BASIC log4cxx::BasicConfigurator::configure();
00047 #define PION_LOG_CONFIG(FILE) log4cxx::PropertyConfigurator::configure(FILE);
00048 #define PION_GET_LOGGER(NAME) log4cxx::Logger::getLogger(NAME)
00049
00050 #define PION_LOG_SETLEVEL_DEBUG(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::DEBUG_INT));
00051 #define PION_LOG_SETLEVEL_INFO(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::INFO_INT));
00052 #define PION_LOG_SETLEVEL_WARN(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::WARN_INT));
00053 #define PION_LOG_SETLEVEL_ERROR(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::ERROR_INT));
00054 #define PION_LOG_SETLEVEL_FATAL(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::FATAL_INT));
00055 #define PION_LOG_SETLEVEL_UP(LOG) LOG->setLevel(LOG->getLevel()->toInt()+1);
00056 #define PION_LOG_SETLEVEL_DOWN(LOG) LOG->setLevel(LOG->getLevel()->toInt()-1);
00057
00058 #define PION_LOG_DEBUG LOG4CXX_DEBUG
00059 #define PION_LOG_INFO LOG4CXX_INFO
00060 #define PION_LOG_WARN LOG4CXX_WARN
00061 #define PION_LOG_ERROR LOG4CXX_ERROR
00062 #define PION_LOG_FATAL LOG4CXX_FATAL
00063
00064 #elif defined(PION_USE_LOG4CPLUS)
00065
00066
00067
00068 #include <log4cplus/logger.h>
00069 #include <log4cplus/configurator.h>
00070
00071 #if defined _MSC_VER
00072 #if defined _DEBUG
00073 #pragma comment(lib, "log4cplusD")
00074 #else
00075 #pragma comment(lib, "log4cplus")
00076 #endif
00077 #endif
00078
00079 namespace pion {
00080 typedef log4cplus::Logger PionLogger;
00081 }
00082
00083 #define PION_LOG_CONFIG_BASIC log4cplus::BasicConfigurator::doConfigure();
00084 #define PION_LOG_CONFIG(FILE) log4cplus::PropertyConfigurator::doConfigure(FILE);
00085 #define PION_GET_LOGGER(NAME) log4cplus::Logger::getInstance(NAME)
00086
00087 #define PION_LOG_SETLEVEL_DEBUG(LOG) LOG.setLogLevel(log4cplus::DEBUG_LOG_LEVEL);
00088 #define PION_LOG_SETLEVEL_INFO(LOG) LOG.setLogLevel(log4cplus::INFO_LOG_LEVEL);
00089 #define PION_LOG_SETLEVEL_WARN(LOG) LOG.setLogLevel(log4cplus::WARN_LOG_LEVEL);
00090 #define PION_LOG_SETLEVEL_ERROR(LOG) LOG.setLogLevel(log4cplus::ERROR_LOG_LEVEL);
00091 #define PION_LOG_SETLEVEL_FATAL(LOG) LOG.setLogLevel(log4cplus::FATAL_LOG_LEVEL);
00092 #define PION_LOG_SETLEVEL_UP(LOG) LOG.setLogLevel(LOG.getLogLevel()+1);
00093 #define PION_LOG_SETLEVEL_DOWN(LOG) LOG.setLogLevel(LOG.getLogLevel()-1);
00094
00095 #define PION_LOG_DEBUG LOG4CPLUS_DEBUG
00096 #define PION_LOG_INFO LOG4CPLUS_INFO
00097 #define PION_LOG_WARN LOG4CPLUS_WARN
00098 #define PION_LOG_ERROR LOG4CPLUS_ERROR
00099 #define PION_LOG_FATAL LOG4CPLUS_FATAL
00100
00101
00102 #elif defined(PION_USE_LOG4CPP)
00103
00104
00105
00106 #include <log4cpp/Category.hh>
00107 #include <log4cpp/BasicLayout.hh>
00108 #include <log4cpp/OstreamAppender.hh>
00109
00110 namespace pion {
00111 typedef log4cpp::Category* PionLogger;
00112 }
00113
00114 #define PION_LOG_CONFIG_BASIC { log4cpp::OstreamAppender *app = new log4cpp::OstreamAppender("cout", &std::cout); app->setLayout(new log4cpp::BasicLayout()); log4cpp::Category::getRoot().setAppender(app); }
00115 #define PION_LOG_CONFIG(FILE) { log4cpp::PropertyConfigurator::configure(FILE); }
00116 #define PION_GET_LOGGER(NAME) (&log4cpp::Category::getInstance(NAME))
00117
00118 #define PION_LOG_SETLEVEL_DEBUG(LOG) { LOG->setPriority(log4cpp::Priority::DEBUG); }
00119 #define PION_LOG_SETLEVEL_INFO(LOG) { LOG->setPriority(log4cpp::Priority::INFO); }
00120 #define PION_LOG_SETLEVEL_WARN(LOG) { LOG->setPriority(log4cpp::Priority::WARN); }
00121 #define PION_LOG_SETLEVEL_ERROR(LOG) { LOG->setPriority(log4cpp::Priority::ERROR); }
00122 #define PION_LOG_SETLEVEL_FATAL(LOG) { LOG->setPriority(log4cpp::Priority::FATAL); }
00123 #define PION_LOG_SETLEVEL_UP(LOG) { LOG->setPriority(LOG.getPriority()+1); }
00124 #define PION_LOG_SETLEVEL_DOWN(LOG) { LOG->setPriority(LOG.getPriority()-1); }
00125
00126 #define PION_LOG_DEBUG(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::DEBUG) { LOG->debugStream() << MSG; }
00127 #define PION_LOG_INFO(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::INFO) { LOG->infoStream() << MSG; }
00128 #define PION_LOG_WARN(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::WARN) { LOG->warnStream() << MSG; }
00129 #define PION_LOG_ERROR(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::ERROR) { LOG->errorStream() << MSG; }
00130 #define PION_LOG_FATAL(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::FATAL) { LOG->fatalStream() << MSG; }
00131
00132 #elif defined(PION_DISABLE_LOGGING)
00133
00134
00135 namespace pion {
00136 typedef int PionLogger;
00137 }
00138
00139 #define PION_LOG_CONFIG_BASIC {}
00140 #define PION_LOG_CONFIG(FILE) {}
00141 #define PION_GET_LOGGER(NAME) 0
00142
00143
00144 #define PION_LOG_SETLEVEL_DEBUG(LOG) { if (false) ++LOG; }
00145 #define PION_LOG_SETLEVEL_INFO(LOG) { if (false) ++LOG; }
00146 #define PION_LOG_SETLEVEL_WARN(LOG) { if (false) ++LOG; }
00147 #define PION_LOG_SETLEVEL_ERROR(LOG) { if (false) ++LOG; }
00148 #define PION_LOG_SETLEVEL_FATAL(LOG) { if (false) ++LOG; }
00149 #define PION_LOG_SETLEVEL_UP(LOG) { if (false) ++LOG; }
00150 #define PION_LOG_SETLEVEL_DOWN(LOG) { if (false) ++LOG; }
00151
00152
00153 #define PION_LOG_DEBUG(LOG, MSG) { if (false) ++LOG; }
00154 #define PION_LOG_INFO(LOG, MSG) { if (false) ++LOG; }
00155 #define PION_LOG_WARN(LOG, MSG) { if (false) ++LOG; }
00156 #define PION_LOG_ERROR(LOG, MSG) { if (false) ++LOG; }
00157 #define PION_LOG_FATAL(LOG, MSG) { if (false) ++LOG; }
00158
00159 #else
00160
00161 #define PION_USE_OSTREAM_LOGGING
00162
00163
00164 #include <iostream>
00165 #include <string>
00166 #include <ctime>
00167
00168 namespace pion {
00169 struct PION_COMMON_API PionLogger {
00170 enum PionPriorityType {
00171 LOG_LEVEL_DEBUG, LOG_LEVEL_INFO, LOG_LEVEL_WARN,
00172 LOG_LEVEL_ERROR, LOG_LEVEL_FATAL
00173 };
00174 ~PionLogger() {}
00175 PionLogger(void) : m_name("pion") {}
00176 PionLogger(const std::string& name) : m_name(name) {}
00177 PionLogger(const PionLogger& p) : m_name(p.m_name) {}
00178 std::string m_name;
00179 static PionPriorityType m_priority;
00180 };
00181 }
00182
00183 #define PION_LOG_CONFIG_BASIC {}
00184 #define PION_LOG_CONFIG(FILE) {}
00185 #define PION_GET_LOGGER(NAME) pion::PionLogger(NAME)
00186
00187 #define PION_LOG_SETLEVEL_DEBUG(LOG) { LOG.m_priority = pion::PionLogger::LOG_LEVEL_DEBUG; }
00188 #define PION_LOG_SETLEVEL_INFO(LOG) { LOG.m_priority = pion::PionLogger::LOG_LEVEL_INFO; }
00189 #define PION_LOG_SETLEVEL_WARN(LOG) { LOG.m_priority = pion::PionLogger::LOG_LEVEL_WARN; }
00190 #define PION_LOG_SETLEVEL_ERROR(LOG) { LOG.m_priority = pion::PionLogger::LOG_LEVEL_ERROR; }
00191 #define PION_LOG_SETLEVEL_FATAL(LOG) { LOG.m_priority = pion::PionLogger::LOG_LEVEL_FATAL; }
00192 #define PION_LOG_SETLEVEL_UP(LOG) { ++LOG.m_priority; }
00193 #define PION_LOG_SETLEVEL_DOWN(LOG) { --LOG.m_priority; }
00194
00195 #define PION_LOG_DEBUG(LOG, MSG) if (LOG.m_priority <= pion::PionLogger::LOG_LEVEL_DEBUG) { std::cout << time(NULL) << " DEBUG " << LOG.m_name << ' ' << MSG << std::endl; }
00196 #define PION_LOG_INFO(LOG, MSG) if (LOG.m_priority <= pion::PionLogger::LOG_LEVEL_INFO) { std::cout << time(NULL) << " INFO " << LOG.m_name << ' ' << MSG << std::endl; }
00197 #define PION_LOG_WARN(LOG, MSG) if (LOG.m_priority <= pion::PionLogger::LOG_LEVEL_WARN) { std::cerr << time(NULL) << " WARN " << LOG.m_name << ' ' << MSG << std::endl; }
00198 #define PION_LOG_ERROR(LOG, MSG) if (LOG.m_priority <= pion::PionLogger::LOG_LEVEL_ERROR) { std::cerr << time(NULL) << " ERROR " << LOG.m_name << ' ' << MSG << std::endl; }
00199 #define PION_LOG_FATAL(LOG, MSG) if (LOG.m_priority <= pion::PionLogger::LOG_LEVEL_FATAL) { std::cerr << time(NULL) << " FATAL " << LOG.m_name << ' ' << MSG << std::endl; }
00200
00201 #endif
00202
00203 #endif