我正在处理一个大型遗留项目,需要重做公共记录器。我试着制作和以前相同的记录器接口,以避免更换大量的记录器。我需要重做记录器的原因是旧的是使用内置库函数的syslogUDP,而新的是使用GELFUDP。
假设我有一个包含两部分消息的日志,严重性是信息。旧界面如下:
Log_INFO<< "First part message" <<"Second part message"<< endl;
Log_INFO类似于"std::cout",但它有两个功能:
- 在命令行中打印消息
- 在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
函数。
例如,请参阅此以获取示例,并参阅此以获得进一步的指导。