如何使用时间戳并使用严重性
How to use timestamp and use string of severity?
- 我使用官方代码进行了接下来的格式化
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
一起使用,只是枚举
- 我试图通过提供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];
}
任何人都可以帮助我
sink::set_formatter
功能功能中的"时间戳"输出Severity
的输出字符串,而不是int
-
您提出的代码不完整。在格式化表达式中,
severity
必须是其从日志记录中提取严重性级别的属性关键字。目前尚不清楚您的情况是什么,我怀疑它可能是一个常数,无论附加在日志记录上的实际严重程度如何。 -
coloring_formatter
功能不正确,因为它尝试使用格式lambda表达式expr::format_date_time
带有实际流。
您必须了解a lambda表达式 a.k.a. 懒惰表达式(该函数在以后的时间;当该功能调用该函数时流,它将执行格式化(和实际流式表达式,该表达式在执行时会在流中产生输出。expr::format_date_time
和boost::log::expressions
名称空间中的其他组件用于构成过滤器和格式化器的lambda表达式。它们不能用于实际的流输出表达式中。
调用sink.set_formatter
时,您必须提供一个函数,该功能将在调用时执行日志记录格式。有多种描述该功能的方法。一种方法是使用lambda表达式,例如在您的情况#1中,从expr::stream
或expr::format
开始。另一种方法是从头开始编写功能,就像在您的情况#2中一样,但是在该功能中,您不能再使用lambda表达式。
您可以查看boost.log示例(例如,此处,此处或此处(如何格式化日期/时间和严重性级别。有关这些示例的重要部分:
- 对于严重性级别类型,有一个
operator<<
,它可以从枚举到字符串进行转换。该操作员必须与枚举相同的命名空间,否则编译器将不会找到它,并且将作为整数输出枚举。 - 严重性级枚举必须在记录器类型中用作其模板参数。这样,您将确保对日志记录具有枚举类型的严重性水平。
- 严重程度枚举必须在格式化器中使用,您可以在其中指定严重性级别。当您使用
expr::attr
时,它必须在模板参数中,当您使用关键字时,它必须是使用BOOST_LOG_ATTRIBUTE_KEYWORD
的关键字定义的一部分。这将确保格式化者能够在称为格式时从日志记录中提取枚举。 - 格式化日期/时间时,
expr::format_date_time
只能在lambda表达式中使用。当您从头开始编写格式化函数时,您必须使用boost.datetime或诸如strftime
之类的函数以格式化时间戳。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- C++:TypeDef使用元组
- 使用std::multimap迭代器创建std::list
- 从不同线程使用int64的不同字节安全吗
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用Google Mock来模拟gettimeofday()
- 如何使用默认参数等选择模板专业化
- 为什么使用 "this" 指针调用派生成员函数?
- 如何使用时间戳并使用严重性
- boost ::日志 - 使用库/插件内的独立严重性级别
- 使用 LLVM 的 libc++ 时,__1 符号从何而来?
- 在std::cout之后使用std::cin时,换行符从何而来
- 提升::日志 - 使用严重性和自定义过滤器属性记录?要使用的宏
- 将 boost::log 严重性筛选器设置为调用函数,而不是使用常量严重性
- 为什么以及在何处在C++中使用引用和指针
- 基例如何影响使用递归函数的哪些行
- Boost日志在使用配置文件时不显示严重性或按严重性过滤