对 log4cplus 库的封装,修改自网路
LogUtils.h
/* * LogUtils.h * * Created on: 2018年8月9日 * Author: oftenlin */ #ifndef UTILS_LOGUTILS_H_ #define UTILS_LOGUTILS_H_ // LogUtils.h: interface for the LogUtils class. // // #include "log4cplus/loglevel.h" #include "log4cplus/ndc.h" #include "log4cplus/logger.h" #include "log4cplus/configurator.h" #include "iomanip" #include "log4cplus/fileappender.h" #include "log4cplus/layout.h" #include <log4cplus/loggingmacros.h> using namespace log4cplus; using namespace log4cplus::helpers; #define PATH_SIZE 100 //日志封装 #define TRACE(p) LOG4CPLUS_TRACE(LogUtils::_logger, p) #define DEBUG(p) LOG4CPLUS_DEBUG(LogUtils::_logger, p) #define NOTICE(p) LOG4CPLUS_INFO(LogUtils::_logger, p) #define WARNING(p) LOG4CPLUS_WARN(LogUtils::_logger, p) #define FATAL(p) LOG4CPLUS_ERROR(LogUtils::_logger, p) // 日志控制类,全局共用一个日志 class LogUtils { public: // 打开日志 bool open_log(); // 获得日志实例 static LogUtils& instance(); static Logger _logger; private: LogUtils(); virtual ~LogUtils(); //log文件路径及名称 char _log_path[PATH_SIZE]; char _log_name[PATH_SIZE]; }; #endif /* UTILS_LOGUTILS_H_ */
LogUtils.cpp
/* * LogUtils.cpp * * Created on: 2018年8月9日 * Author: oftenlin */ // Log.cpp: implementation of the Log class. // // #include "LogUtils.h" #include <memory> // // Construction/Destruction // Logger LogUtils::_logger = log4cplus::Logger::getInstance("main_log"); LogUtils::LogUtils() { snprintf(_log_path, sizeof(_log_path), "%s", "./log"); snprintf(_log_name, sizeof(_log_name), "%s/%s.%s", _log_path, "app", "log"); } LogUtils::~LogUtils() { } LogUtils& LogUtils::instance() { static LogUtils log; return log; } bool LogUtils::open_log() { int Log_level = 0; /* step 1: Instantiate an appender object */ SharedAppenderPtr _append(new FileAppender(_log_name)); _append->setName("file log test"); /* step 2: Instantiate a layout object */ std::string pattern = "[%p] [%d{%m/%d/%y %H:%M:%S}] [%t] - %m %n"; std::auto_ptr<Layout> _layout(new PatternLayout(pattern)); // std::auto_ptr<Layout> pTTCLayout(new TTCCLayout()); /* step 3: Attach the layout object to the appender */ _append->setLayout(_layout); // _append->setLayout(pTTCLayout); /* step 4: Instantiate a logger object */ /* step 5: Attach the appender object to the logger */ LogUtils::_logger.addAppender(_append); /* step 6: Set a priority for the logger */ LogUtils::_logger.setLogLevel(Log_level); return true; }