3

我在 perl 中记录这样的消息-

syslog ("LOG_INFO", "this is info");
syslog ("LOG_WARNING", "this is warning");

当我看到这些消息时,我明白了——

Nov 15 20:20:47 ubuntu tag-0.0.2[13399]: this is info
Nov 15 20:20:47 ubuntu tag-0.0.2[13399]: this is warning

syslog 消息中的单词“ubuntu”恰好是本地主机的主机名。

有没有办法我可以在本地登录但指定一个主机名?

我的应用程序处理来自其他主机的数据并记录有关它们的信息。如果我可以在记录消息时指定主机名,那就太好了,这样我就可以轻松地使用第三方工具,因为它们可以轻松地根据主机名过滤掉日志。

顺便说一句,如果我可以添加其他问题 - 为什么日志没有显示消息级别?我不应该期望在我正在记录的信息系统日志消息中看到“信息”吗?

4

2 回答 2

2

完成此任务的最简单方法可能是将 设置为syslog通过网络接收消息。对于rsyslog,这通常出现在/etc/rsyslog.conf

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

我在这里使用 UDP 是因为它很容易在几乎任何syslog守护进程上执行,并且很容易演示:

$ echo "<0>Oct 11 22:14:15 mymachine testing" | nc -u localhost syslog
^C
$ tail -1 /var/log/syslog
Oct 11 22:14:15 mymachine testing

简而言之:<nnn>代表设施和优先级,如RFC 的第 4.1.1 节所述。时间戳在 4.1.2 中高度指定:简而言之,三个字母的英文月份缩写,没有前导0- 而是一个前导空格:Aug__8而不是Aug_8(使用下划线,因为空格在代码块中折叠)。主机名不能有任何域部分。IP 地址很好,IPv4 和 IPv6 都可以。

您还可以使用 Unix 域套接字 ( unix(7)),例如/dev/log. 那将比UDP更可靠。

于 2011-11-16T02:59:47.570 回答
0

不幸的是,如果您在本地登录,我认为不可能指定主机名。

此外,您不应该在日志前看到“信息”。日志级别会影响消息的去向(您可以在 /etc/syslog.conf 中自定义)。默认情况下,LOG_INFO 和 LOG_WARNING 转到 /var/log/messages.log,LOG_EMERG 和 LOG_ERR 转到 /var/log/errors.log。该级别不会出现在输出中。

于 2011-11-16T03:05:44.867 回答