有没有办法将系统日志消息重定向到标准输出?

Posted

技术标签:

【中文标题】有没有办法将系统日志消息重定向到标准输出?【英文标题】:Is there a way to redirect syslog messages to stdout? 【发布时间】:2013-05-08 16:54:26 【问题描述】:

我有一个可以在两种模式下运行的应用程序,使用 CLI 或作为守护程序。

我正在使用syslog() 进行日志记录。但是,当在 CLI 模式下运行时,我希望所有日志记录,除了那些标记为LOG_DEBUG 的消息,都将发送到控制台而不是记录下来。

我尝试使用setlogmask(),但这似乎并没有重定向到控制台。

最好的方法是什么?

【问题讨论】:

AFAIK,FreeBSD 的 syslog 允许通过 /etc/syslog.conf 进行重定向。无论如何,这不是您要寻找的方式。我建议编写一个函数来检测你是作为 CLI 应用程序还是守护程序运行并执行它应该做的事情:写入控制台或系统日志。 【参考方案1】:

按照 maverik 在 cmets 中的建议,我在 syslog 周围编写了一个包装器,用于确定是将输出发送到日志还是控制台。这是以防万一有人需要这个。

void mylog (int level, const char *format, ...)

    va_list args;
    va_start (args, format);

    if (remote)
    
        vsyslog(level, format, args);
       
    else
    
        if (level == LOG_DEBUG)
            vsyslog(level, format, args);
        else
            vprintf(format, args);
    
    va_end(args);

【讨论】:

在从函数返回之前调用va_end(args)【参考方案2】:

作为 GNU 特定的解决方案,我建议使用 openlog(NULL, LOG_PERROR, your_facility)。不可自定义(仅在标准错误中复制)。

【讨论】:

以上是关于有没有办法将系统日志消息重定向到标准输出?的主要内容,如果未能解决你的问题,请参考以下文章

将所有输出重定向到 Bash 中的文件 [重复]

shell从入门到精通(13)输出重定向

shell从入门到精通(13)输出重定向

在 Jasmine 测试中将对 console.log() 的调用重定向到标准输出

怎样去掉提示:nohup:重定向标准错误到标准输出

将命令行进程的标准输出重定向到文件