如何自定义Boost.Log的"TimeStamp"格式

JQ.*_*JQ. 13 format logging boost timestamp boost-log

我想得到年 - 月 - 小时:分:秒.分数(2位数),如果我使用"%Y-%m-%d%H:%M:%S.%f",我几乎得到了什么我想要秒的分数(最后一部分)的异常,它在我的Windows XP上显示6位数,我不知道如何获得2位数,任何想法?

Boa*_*niv 4

Boost.DateTime(Boost.Log 所依赖的)似乎不支持专门的小数秒格式,因此唯一的方法是编写自己的自定义属性格式化程序,或者(更简单但不太好的方法)稍微修改您的格式化代码。

而不是这样的:

backend->set_formatter
(
    fmt::stream <<
      fmt::date_time<boost::posix_time::ptime>
        ("TimeStamp", keywords::format = "%Y-%m-%d %H:%M:%S.%f"));

backend->set_formatter
(
    fmt::stream <<
    fmt::date_time<boost::posix_time::ptime>
        ("TimeStamp", keywords::format = %Y-%m-%d %H:%M:%S.") <<
    (fmt::format("%.2s") % fmt::date_time<boost::posix_time::ptime>("%f"))
);
Run Code Online (Sandbox Code Playgroud)

我自己没有测试过它,但我相信它应该可以工作:第一个fmt::date_time()将返回不带小数秒的时间戳,而第二个fmt::date_time()将仅返回秒的小数部分,该秒将被fmt::format().