有没有办法将系统日志消息重定向到标准输出?
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)
。不可自定义(仅在标准错误中复制)。
【讨论】:
以上是关于有没有办法将系统日志消息重定向到标准输出?的主要内容,如果未能解决你的问题,请参考以下文章