runit 手册指出,在配置中可以使用选项将日志提交至:
ua.bcd[:port] 告诉 svlogd 将选定日志消息的前 len 个字符传输到 IP 地址 abcd、端口号 port。如果未设置 port,则使用 syslog 的默认端口 (514)。len 可以通过 -l 选项设置,见下文。如果 svlogd 在发送 udp 数据包时遇到问题,它会将错误消息写入日志目录。注意:通过 udp 进行日志记录不可靠,应仅用于私有网络。
我知道rsyslogd
这个端口上有正在运行的列表。所以这可能是一个可行的选择...
但是还有其他选择吗?
答案1
这个问题有点模糊,但听起来,我想你是在问是否可以使用svlogd
将系统日志消息发送到除 之外的其他程序rsyslogd
。答案是,任何提供系统日志服务的程序就足够了。 不仅仅rsyslogd
提供 syslog 网络服务。
但是,runit 本来设计用来“本地”处理日志的方式可能与您的想法相反。
这个想法是,您有某种服务,并且该服务通过 stdout 或 stderr 写入输出。程序runsv
将启动svlogd
并建立您的服务和 之间的管道svlogd
;您的服务所要做的就是将数据发送到 stdout/stderr,svlogd 将直接写入磁盘,一切就绪了。由于管道由 维护runsv
,因此如果服务出现问题,输出仍会被捕获并传递到svlogd
- 因此理论,您不会因为服务崩溃而丢失日志数据。
同一作者还有另一个程序,socklog
,它充当 syslog 前端,将数据汇集到svlogd
。由于许多程序只是假设 可用/dev/log
,因此socklog
提供此接口以便可以捕获 syslog 数据 - 它充当替代 syslog 服务。 这与您的建议正好相反。
我并不是说你不应该使用 syslog,我只是说有多种方法可以做到这一点。如果你真的想将 svlogd 的输出转回到 syslog,那么是的,任何旧的 syslog 服务都可以,但rsyslogd
如果你的安装允许,可能值得考虑“全部使用本机”并完全放弃它。