Boost log 简单使用

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

Boost log 简单使用的相关文章

boost.log要点笔记

常用简写: namespace logging = boost::log; namespace src = boost::log::sources; namespace expr = boost::log::expressions; namespace sinks = boost::log::sinks; namespace attrs = boost::log::attributes; namespace keywords = boost::log::keywords; 要点: 结构图要牢记在

boost.log 的使用

在编译boost.log 的示例程序时,遇到了下面的错误: zhifan$ make boost_log LDFLAGS='-lboost_log-mt' Undefined symbols for architecture x86_64: "boost::log::v2s_mt_posix::record_view::public_data::destroy(boost::log::v2s_mt_posix::record_view::public_data const*)", re

boost.log(九) 配置文件

前面几节中描述了Boost.Log 的基础知识,对Boost.Log 库的操作我们都是在C++代码中进行中,这样就会有一些不便的地方.比如说我们想要更改一下输出格式或者过滤条件,都必须对C++代码进行更改,并且还得编译一次(感觉编译时间还有点长).其实Boost.Log 里面已经为这个问题提供了一种解决方案,就是通过配置文件来初始化Boost.Log 库,C++这边的代码也比较简单,就是这样的: std::ifstream settings("settings.txt"); if (!

boost.log(四)记录器

记录器对象 在上个章节的接收器部分我们已经知道了boost.log库是如何存储日志的,现在是时候去尝试记录日志了.首先我们要创建一个记录器,这非常简单: boost::log::sources::logger lg; [注意]boost.log库在后台给记录器(logger)提供了写的功能,就如同BOOST_LOG_TRIVIAL 宏一样. 与接收器不同,记录器无须在任何地方注册,因为它们是直接与日志记录核心进行交互的.此外请注意boost.log库提供了两个版本的记录器: 线程安全的(logg

boost.log(一)打印日志

打印输出 对于那些不想阅读手册,只需要一个简单的工具用于日志记录的人.你可以直接在控制台中输出日志信息,首先你需要包含头文件boost/log/trivial.hpp,然后编写下面的代码: #include <iostream> #include <boost/log/trivial.hpp> int main(int, char*[]) { BOOST_LOG_TRIVIAL(trace) << "A trace severity message"

boost.log(三)接收器

设置接收器 BOOST_LOG_TRIVIAL不能提供足够的灵活性.例如,有时可能需要更复杂的逻辑来处理日志,而不是简单地将其打印在控制台上.为了定制这一点,你必须构造记录接收器,并在boost.log库core里面注册.这通常只需要你在应用程序启动的地方注册一次就够了. [注意]在前面的章节中我们没有初始化任何的接收器,因为boost.log库在没有初始化任何接收器的情况下会使用一个默认的接收器,这就是为什么我们能够在控制台中看到日志的输出结果.如果你设置了自定义的接收器,那么默认的接收器将会

boost.log(六)格式化

如果你尝试运行上一节中的例子,你会发现只有日志记录消息(没有时间戳等属性信息)会被写入到文件.这是因为boost.log库没有设置格式化.即使你添加了属性到boost.log的core或者是记录器中,记录值也不会被输出,除非你指定了这些值的格式. 回到在前面节教程的一个例子: #include <iostream> #include <boost/log/utility/setup/file.hpp> #include <boost/log/sinks/basic_sink_

boost.log(一)输出

打印输出 对于那些不想阅读手册,只需要一个简单的工具用于日志记录的人.你可以直接在控制台中输出日志信息,首先你需要包含头文件boost/log/trivial.hpp,然后编写下面的代码: #include <iostream> #include <boost/log/trivial.hpp> int main(int, char*[]) { BOOST_LOG_TRIVIAL(trace) << "A trace severity message"

Boost Log

boost log支持以下配置宏,只列出一些常用的,如下表所示: Macro name Effect BOOST_LOG_DYN_LINK If defined in user code, the library will assume the binary is built as a dynamically loaded library (“dll” or “so”). Otherwise it is assumed that the library is built in static mo