Boost log 简单使用
flyfish 2014-11-8
该示例是在VC2010 MFC Unicode环境下使用
内容包括
1 启动关闭日志
2 设置日志存储路径
3 设置输出日志等级
4 日志是否立即写入文件
5 设置单个文件的大小
6 设置磁盘最小可利用空间
Logger.h
#pragma once #include <cassert> #include <iostream> #include <fstream> #include <boost/locale/generator.hpp> #include <boost/date_time/posix_time/posix_time_types.hpp> #include <boost/log/common.hpp> #include <boost/log/expressions.hpp> #include <boost/log/utility/setup/file.hpp> #include <boost/log/utility/setup/console.hpp> #include <boost/log/utility/setup/common_attributes.hpp> #include <boost/log/sources/logger.hpp> #include <boost/log/support/date_time.hpp> #include <boost/filesystem.hpp> #include <boost/log/detail/thread_id.hpp> #include <boost/log/sources/global_logger_storage.hpp> namespace logging = boost::log; namespace sinks = boost::log::sinks; namespace attrs = boost::log::attributes; namespace src = boost::log::sources; namespace expr = boost::log::expressions; namespace keywords = boost::log::keywords; enum severity_level { trace, warning, error }; template< typename CharT, typename TraitsT > inline std::basic_ostream< CharT, TraitsT >& operator<< (std::basic_ostream< CharT, TraitsT >& strm, severity_level lvl) { static const char* const str[] = { "trace", "warning", "error" }; if (static_cast< std::size_t >(lvl) < (sizeof(str) / sizeof(*str))) strm << str[lvl]; else strm << static_cast< int >(lvl); return strm; } BOOST_LOG_ATTRIBUTE_KEYWORD(_severity, "Severity", severity_level) BOOST_LOG_ATTRIBUTE_KEYWORD(_timestamp, "TimeStamp", boost::posix_time::ptime) class CLogger { public: CLogger(void); ~CLogger(void); static void Init(); static void Start(); static void Stop(); //日志严重等级过滤输出 static void SetFilterTrace(); static void SetFilterWarning(); static void SetFilterError(); void SetLogFilePath(std::wstring strPath); void SetMinFreeSpace(size_t size); void SetRotationsize(size_t size); private: static size_t m_szMinFreeSpace; static size_t m_szRotationSize; static std::wstring m_strFilePath; static bool m_bAutoFlush; };
Logger.cpp
#include "StdAfx.h" #include "Logger.h" #include <iostream> size_t CLogger::m_szMinFreeSpace=10*1024*1024; size_t CLogger::m_szRotationSize=1*1024*1024; std::wstring CLogger::m_strFilePath=_T("C:\\Log\\"); bool CLogger::m_bAutoFlush=true;; CLogger::CLogger(void) { } CLogger::~CLogger(void) { } void CLogger::Init() { std::locale::global(std::locale("chs")); auto pSink = logging::add_file_log ( keywords::open_mode = std::ios::app,//追加写入 keywords::file_name =m_strFilePath+_T("%Y-%m-%d.log"), keywords::rotation_size = m_szRotationSize, keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0), keywords::min_free_space=m_szMinFreeSpace, keywords::format =( expr::stream << "["<<expr::attr<UINT>("RecordID") << "]["<<expr::format_date_time(_timestamp,"%Y-%m-%d %H:%M:%S.%f") << "]["<<_severity << "]" <<expr::wmessage) ); pSink->locked_backend()->auto_flush(m_bAutoFlush); logging::add_common_attributes(); attrs::counter<UINT> RecordID(1); logging::core::get()->add_global_attribute("RecordID", RecordID); ; } void CLogger::Start() { logging::core::get()->set_logging_enabled(true); } void CLogger::Stop() { logging::core::get()->set_logging_enabled(false); } void CLogger::SetFilterTrace() { logging::core::get()->set_filter(expr::attr<severity_level>("Severity") >= trace); } void CLogger::SetFilterWarning() { logging::core::get()->set_filter(expr::attr<severity_level>("Severity")>= warning); } void CLogger::SetFilterError() { logging::core::get()->set_filter(expr::attr<severity_level>("Severity")>= error); } void CLogger::SetLogFilePath(std::wstring strPath) { m_strFilePath=strPath; } void CLogger::SetMinFreeSpace(size_t size) { m_szMinFreeSpace=size* 1024 * 1024; } void CLogger::SetRotationsize(size_t size) { m_szRotationSize=size* 1024 * 1024; }
使用
CLogger::Init():
src::wseverity_logger< severity_level > slg; BOOST_LOG_SEV(slg, trace) << _T("trace 输出日志ABC"); BOOST_LOG_SEV(slg, warning) << _T("warning 输出日志ABC"); BOOST_LOG_SEV(slg, error) << _T("error 输出日志ABC");
时间: 2024-10-28 10:52:52