如何让 cout 同时发送到控制台和系统日志

Posted

技术标签:

【中文标题】如何让 cout 同时发送到控制台和系统日志【英文标题】:How to have cout send to console and syslog simultaneously 【发布时间】:2017-09-23 13:19:56 【问题描述】:

谁能给出一个创建自定义 cout 的简单示例,我想让 MyCout 类在控制台上打印并同时将字符串发送到 syslog。

MyCout myCout

myCout << "Test" << endl;

我需要将控制台输出“Test”和“Test”发送到 syslog。

【问题讨论】:

不简单。通常我们选择在stringstream 中构建输出,然后将最终结果输出到coutsyslog 仅供参考:您通常不能保证发送到标准输出的输出被发送到控制台。用户可以随意重定向输出。如果你想在控制台坚持,那么你必须直接写到tty(假设进程实际上有一个)。可能类似于使用 curses 库。 【参考方案1】:

简单的解决方案(仅适用于 C 风格的字符串):

#include <iostream>
using namespace std;

void syslog(const char* msg) 
    std::cout << "syslog " << msg;


struct MyCout 
    void operator<< (const char* rhs) 
        std::cout << rhs << "\n";
        syslog(rhs);
    
;

int main() 
    MyCout myCout;

    myCout << "Test";
    return 0;

如果您不想输出不同的或自定义的类型,它会变得更加复杂。

【讨论】:

以上是关于如何让 cout 同时发送到控制台和系统日志的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot+ELK日志系统搭建

如何捕获发送到特定端口的系统日志数据

从无到有构建日交易额百亿级交易系统的日志系统

2003系统如何让同一用户在本地和远程同时登录

k8s-日志落地

shell建设告警系统