记录器的C++接口



我正在处理一个大型遗留项目,需要重做公共记录器。我试着制作和以前相同的记录器接口,以避免更换大量的记录器。我需要重做记录器的原因是旧的是使用内置库函数的syslogUDP,而新的是使用GELFUDP。

假设我有一个包含两部分消息的日志,严重性是信息。旧界面如下:

Log_INFO<< "First part message" <<"Second part message"<< endl;

Log_INFO类似于"std::cout",但它有两个功能:

  1. 在命令行中打印消息
  2. 在Graylog中收集

我的新功能如下:

//Severity = {debug,info,warning, error, critical}
Log(Severity, whole_message)

对于相同的例子,

Log("info",first_part_message+ second_part_message)

我的问题是如何使我的函数能够像旧的一样读取日志。

一种常见的方法是创建一个自定义的streambuf派生类(比如LogStreambuf(和一个使用LogStreambuf(但在其他方面是一个简单的ostream(的ostream派生类(例如LogStream(。

那么您的日志对象将是

LogStream Log_INFO("info");
LogStream Log_WARN("warn");

等等。

您的自定义streambuf可能应该从sync方法调用Log函数。

例如,请参阅此以获取示例,并参阅此以获得进一步的指导。

最新更新