写程序的时候,日志记录是少不了的,我们可以用boost来实现日志的记录。
我们直接上代码。
1、头文件中的具体代码实现:
#pragma once
#include<stdio.h>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/sinks/text_file_backend.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <fstream>
#include <iostream>
#include <sstream>
using namespace std;
namespace logging = boost::log;
namespace src = boost::log::sources;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;
namespace logging = boost::log;
namespace src = boost::log::sources;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;
using namespace logging::trivial;
class CGrockPubChatLog
{
public:
~CGrockPubChatLog() {}
static CGrockPubChatLog& Single() { static CGrockPubChatLog single; return single; }
private:
CGrockPubChatLog() {}
public:
void Init();
src::severity_logger<severity_level>& GetLg()
{
return lg;
}
private:
src::severity_logger<severity_level> lg;
};
#define CHAT_FUN_FILE_LINE " ;"<<__FUNCTION__<<"(); File:"<<__FILE__<<" Line:"<<__LINE__
#define CHAT_FUN_LINE " ;( "<<__LINE__<<" ):"<<__FUNCTION__
#define CHAT_Cc_LOG_MSG(MSG,GRADE)\
do{\
stringstream strStream;\
strStream<<MSG<<endl;\
BOOST_LOG_SEV(CGrockPubChatLog::Single().GetLg(), GRADE) << strStream.str().c_str();\
printf("%s", strStream.str().c_str());\
} while(0)
#define CHATLOG_SYSINFO(LOGINFO) do{ CHAT_Cc_LOG_MSG(LOGINFO, info);}while(0)
#define CHATLOG_WARNING(LOGINFO) do{ CHAT_Cc_LOG_MSG(LOGINFO, warning);}while(0)
#define CHATLOG_ERROR(LOGINFO) do{ CHAT_Cc_LOG_MSG(LOGINFO, error);}while(0)
#define CHATLOG_FAYAL(LOGINFO) do{ CHAT_Cc_LOG_MSG(LOGINFO, fatal);}while(0)
#define CHATLOG_DEBUG(LOGINFO) do{ CHAT_Cc_LOG_MSG(LOGINFO, debug);}while(0)
2、Cpp中的代码实现比较简单
#include "./log.h"
void CGrockPubChatLog::Init()
{
logging::add_file_log
(
keywords::auto_flush = true,
keywords::file_name = "Cc%Y-%m-%d_%H-%M-%S.%N.log",
keywords::rotation_size = 10 * 1024 * 1024,
keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
keywords::format = "[%TimeStamp%] (%Severity%) : %Message%"
);
logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::info);
logging::add_common_attributes();
}