在 boost::log 中使用格式语法
Using format syntax in boost::log
在boost::log
进入官方提升库之前(从 1.54 开始),我使用的是带有以下代码的 sourceforge 版本:
boost::log::formatters::fmt_format<char> simpleFormat(
boost::log::formatters::format("%1% %2%") %
boost::log::formatters::date_time<boost::posix_time::ptime>(
"TimeStamp", boost::log::keywords::format = "%H:%M:%S") %
boost::log::formatters::message());
以及后来的:
log_sink->locked_backend()->set_formatter(simpleFormat)
但是,我根本无法弄清楚如何在不使用流语法的情况下使用新的 boost::log
API 表达上述日志记录格式(我想坚持上面的格式样式语法)。有什么想法吗?
更新:这是我得到的编译器错误(使用 gcc 4.6.3):
> boost/boost/log/expressions/formatters/date_time.hpp: In constructor
> ‘boost::log::v2s_mt_posix::expressions::format_date_time_terminal<T,
> FallbackPolicyT, CharT>::format_date_time_terminal(const
> boost::log::v2s_mt_posix::attribute_name&, const fallback_policy&,
> const string_type&) [with T = boost::posix_time::ptime,
> FallbackPolicyT = boost::log::v2s_mt_posix::fallback_to_none, CharT =
> char,
> boost::log::v2s_mt_posix::expressions::format_date_time_terminal<T,
> FallbackPolicyT, CharT>::fallback_policy =
> boost::log::v2s_mt_posix::fallback_to_none,
> boost::log::v2s_mt_posix::expressions::format_date_time_terminal<T,
> FallbackPolicyT, CharT>::string_type = std::basic_string<char>]’:
> /boost/boost/log/expressions/formatters/date_time.hpp:229:94:
> instantiated from
> ‘boost::log::v2s_mt_posix::expressions::format_date_time_actor<AttributeValueT,
> boost::log::v2s_mt_posix::fallback_to_none, CharT>
> boost::log::v2s_mt_posix::expressions::format_date_time(const
> boost::log::v2s_mt_posix::attribute_name&, const CharT*) [with
> AttributeValueT = boost::posix_time::ptime, CharT = char]’
> /src/log.cc:169:102: instantiated from here
> /boost/boost/log/expressions/formatters/date_time.hpp:94:98: error:
> incomplete type
> ‘boost::log::v2s_mt_posix::expressions::format_date_time_terminal<boost::posix_time::ptime,
> boost::log::v2s_mt_posix::fallback_to_none, char>::formatter_generator
> {aka
> boost::log::v2s_mt_posix::expressions::aux::date_time_formatter_generator_traits<boost::posix_time::ptime,
> char, void>}’ used in nested name specifier compilation terminated due
> to -Wfatal-errors.
更新2:我必须包括
#include <boost/log/support/date_time.hpp>
为了使其工作。
这就是你想要的吗?
http://www.boost.org/doc/libs/1_54_0/libs/log/doc/html/log/tutorial/formatters.html#log.tutorial.formatters.boost_format_style_formatters
案例示例
logging::formatter simpleFormat(expr::format("%1% %2%") %
expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%H:%M:%S") %
expr::smessage);
您还可以使用以下代码像这样格式化日志:
namespace keywords = boost::log::keywords;
namespace expr = boost::log::expressions;
logging::add_file_log
(
keywords::file_name = "Sample_%N.log", /*< file name pattern >*/
keywords::rotation_size = 1 * 1024, /*< rotate files every 1 KiB >*/
/*< log record format >*/
keywords::format =
(
expr::stream
//<< std::hex //To print the LineID in Hexadecimal format
<< std::setw(8) << std::setfill('0')
<< expr::attr< unsigned int >("LineID")
<< "t"
<< expr::format_date_time<boost::posix_time::ptime>("TimeStamp","%H:%M:%S.%f")
<< "t: <" << logging::trivial::severity
<< "> t" << expr::smessage
)
);
输出如下:
00000741 15:50:11.636997 : <> Logger Starts
00000742 15:50:11.660012 : <> Thread74
00000743 15:50:11.682028 : <trace> Trace message new
00000744 15:50:11.703041 : <debug> Debug Message new
00000745 15:50:11.725055 : <info> Info message
00000746 15:50:11.748088 : <warning> warning Warning message new
00000747 15:50:11.770083 : <error> error An error message new
00000748 15:50:11.792100 : <fatal> fatal A fatal message new
00000749 15:50:11.818117 : <> Thread74
00000750 15:50:11.841148 : <> Logger Stops
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- 如何在openssl-ecc中获取十六进制格式的私钥
- QMetaObject invokeMethod的基于函数指针的语法
- 将"打开的CV图像"中的"颜色"转换为整数格式
- TDateTime格式在C++Builder中不会更改
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 检查不带转换的扫描格式
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 是否可以从格式字符串中检索"width"
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- clang格式:宏的缩进
- clang格式:禁用排序包含
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么
- 在 boost::log 中使用格式语法
- 字符串流格式语法
- 在MFC上选择多个UINT格式时出现语法错误