/* --------------------------------------------------------------------------- ** This software is in the public domain, furnished "as is", without technical ** support, and with no warranty, express or implied, as to its usefulness for ** any purpose. ** ** logger.h ** ** -------------------------------------------------------------------------*/ #ifndef LOGGER_H #define LOGGER_H #include #include "log4cpp/Category.hh" #include "log4cpp/FileAppender.hh" #include "log4cpp/PatternLayout.hh" enum LoggerVerbose { LV_ERROR, LV_WARN, LV_NOTICE, LV_INFO, LV_DEBUG }; #define LOG(__level) log4cpp::Category::getRoot() << log4cpp::Priority::__level << __FILE__ << ":" << __LINE__ << "\t" #define LOGP(__level, __format, arg...) log4cpp::Category::getRoot().log(log4cpp::Priority::__level, "%s:%d\t" __format, __FILE__, __LINE__, ##arg); #define LOG_DEBUG LOG(DEBUG) // Debug message do not care in any production environment #define LOG_INFO LOG(INFO) // Not significant event but useful for deal with online problem #define LOG_NOTICE LOG(NOTICE) // Important event #define LOG_WARN LOG(WARN) // Important event or input which will lead to errors #define LOG_ERROR LOG(ERROR) // Error message means program running in an abnormal (not expected) way inline void initLogger(LoggerVerbose verbose) { // initialize log4cpp log4cpp::Category &log = log4cpp::Category::getRoot(); log4cpp::Appender *app = new log4cpp::FileAppender("root", fileno(stdout)); if (app) { log4cpp::PatternLayout *plt = new log4cpp::PatternLayout(); if (plt) { plt->setConversionPattern("%d [%-6p] - %m%n"); app->setLayout(plt); } log.addAppender(app); } switch (verbose) { case LV_DEBUG: log.setPriority(log4cpp::Priority::DEBUG); break; case LV_INFO: log.setPriority(log4cpp::Priority::INFO); break; case LV_NOTICE: log.setPriority(log4cpp::Priority::NOTICE); break; case LV_WARN: log.setPriority(log4cpp::Priority::WARN); break; case LV_ERROR: log.setPriority(log4cpp::Priority::ERROR); break; default: log.setPriority(log4cpp::Priority::NOTICE); break; } LOG_INFO << "level:" << log4cpp::Priority::getPriorityName(log.getPriority()); } #endif