如何将syslog输出发送到标准输出?

6

我在我的程序中使用syslog来生成日志消息。

有没有一种方法可以将我的程序的syslog输出发送到stdout?

我不想使用tail命令查看我的程序日志,我希望直接在控制台上查看它。


1
这只是配置syslog守护程序的问题。但是,在任何给定的上下文中,你无法真正预测“标准输出”是什么意思,因此在文件上运行tail可能是最简单的方法。例如,如果你已经登录到/dev/ttyS0root,并且你自己在/dev/pts/17/dev/pts/42上,它应该写入所有三个还是只写入子集?如果其中一个是screen会话或类似的关键交互对话框呢?有很多复杂性。 - tripleee
2个回答

6
你需要编辑/etc/syslog.conf文件。根据你要发送到syslogd的设施不同,你需要添加类似以下这样的一行内容:
<facility>.debug    /dev/console

请务必查看 man 5 syslog.conf 以获取所有详细信息。


1
我需要在一个Docker容器(php:7.4-fpm)中运行cron,但它似乎只记录到rsyslog/dev/log)。对我有效的方法是*.* /dev/stdout/dev/console不存在,指定/dev/tty也没有任何区别)。 - x-yuri
这里也使用了Docker -- 我的容器是基于Debian的,所以我需要执行apt-get install rsyslog命令,将cron.* /dev/console添加到/etc/rsyslog.conf文件中,并执行service rsyslog start命令 -- 然后我就可以使用cron -f在前台运行它并在标准输出上查看输出。 - NReilingh
更正 -- /dev/console 似乎只在交互式会话中有效。我意识到这些目标是相对于 rsyslogd 而不是 cron 的,所以最终我在前台运行了 rsyslogd(使用 -n 参数)并将其定向到 /dev/stdout - NReilingh

3

要在控制台/Shell 中持续克隆文件输出,请使用以下命令:

tail -f <logfile> &

-f参数可以让tail命令继续打印文件中写入的内容。

&符号可以将进程放到后台,这样你就可以在窗口中做其他事情了。如果要让控制台一直等待直到你按下ctrl+c,则不需要使用&符号。


嗨,Klas,如果我正在使用Eclipse调试应用程序,我可以使用您建议的将输出定向到stdout的方法吗?还是需要以其他方式进行?谢谢。 - ransh
如果您的应用程序记录到文件,您可以随时使用我的建议方法。只要确保日志功能刷新输出缓冲区,因为文件I/O通常是块缓冲(而不像控制台I/O一样是行缓冲)。 - Klas Lindbäck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接