如何使用时间戳并使用严重性

How to use timestamp and use string of severity?

本文关键字:严重性 何使用 时间戳      更新时间:2023-10-16
  1. 我使用官方代码进行了接下来的格式化
    sink.set_formatter    (
        expr::stream
        << "[ "
        << expr::format_date_time<boost::posix_time::ptime>("TimeStamp","%H:%M:%S.%f")
        << " - " << severity << " ] "
        << expr::smessage
    )

,但OUPUT是[%time% - 1 ] %message%severity仅作为int

输出

,但我想要[%time% - debug ] %message%的结果。

我将severity_logger_mt<SeverityLevel>Severity一起使用,只是枚举


  1. 我试图通过提供sink :: set_formatter一个函数来转换 Severity,符合的错误和输出在代码中显示:
void coloring_formatter(const boost::log::record_view& record,
                            boost::log::formatting_ostream& stream)
{
  stream << "["
    /* !!! ERROR !!! with no acceptable convertor for <<   */
    << record[timestamp]    
   /*!!! compile ERROR !!! no matching function call for format_date_time */
   << expr::format_date_time<
                    boost::posix_time::ptime>(timestamp, "%Y-%m-%d %H:%M:%S")
   /*!!! complied done but with no time stamp output !!!  */
<< boost::log::expressions::format_date_time<
                    boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S")
             << " - " << type << "] "
             << record[boost::log::expressions::smessage];
    }

任何人都可以帮助我

  1. sink::set_formatter

  2. 功能功能中的"时间戳"输出
  3. Severity的输出字符串,而不是int

  1. 您提出的代码不完整。在格式化表达式中,severity必须是其从日志记录中提取严重性级别的属性关键字。目前尚不清楚您的情况是什么,我怀疑它可能是一个常数,无论附加在日志记录上的实际严重程度如何。

  2. coloring_formatter功能不正确,因为它尝试使用格式lambda表达式 expr::format_date_time带有实际流。

您必须了解a lambda表达式 a.k.a. 懒惰表达式(该函数在以后的时间;当该功能调用该函数时流,它将执行格式化(和实际流式表达式,该表达式在执行时会在流中产生输出。expr::format_date_timeboost::log::expressions名称空间中的其他组件用于构成过滤器和格式化器的lambda表达式。它们不能用于实际的流输出表达式中。

调用sink.set_formatter时,您必须提供一个函数,该功能将在调用时执行日志记录格式。有多种描述该功能的方法。一种方法是使用lambda表达式,例如在您的情况#1中,从expr::streamexpr::format开始。另一种方法是从头开始编写功能,就像在您的情况#2中一样,但是在该功能中,您不能再使用lambda表达式。

您可以查看boost.log示例(例如,此处,此处或此处(如何格式化日期/时间和严重性级别。有关这些示例的重要部分:

  • 对于严重性级别类型,有一个operator<<,它可以从枚举到字符串进行转换。该操作员必须与枚举相同的命名空间,否则编译器将不会找到它,并且将作为整数输出枚举。
  • 严重性级枚举必须在记录器类型中用作其模板参数。这样,您将确保对日志记录具有枚举类型的严重性水平。
  • 严重程度枚举必须在格式化器中使用,您可以在其中指定严重性级别。当您使用expr::attr时,它必须在模板参数中,当您使用关键字时,它必须是使用BOOST_LOG_ATTRIBUTE_KEYWORD的关键字定义的一部分。这将确保格式化者能够在称为格式时从日志记录中提取枚举。
  • 格式化日期/时间时,expr::format_date_time只能在lambda表达式中使用。当您从头开始编写格式化函数时,您必须使用boost.datetime或诸如strftime之类的函数以格式化时间戳。