/* ---------------------------------------------------------------------------
|
** 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 <unistd.h>
|
|
#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
|