我在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”一词恰好是本地主机的主机名。
有没有办法可以在本地登录,但指定主机名?
我的应用处理来自其他主机的数据并记录有关它们的信息。如果我可以在记录消息时指定主机名将会很棒,这样我就可以轻松使用第三方工具,因为它们可以根据主机名轻松过滤掉日志。
顺便说一句,如果我可以添加其他问题 - 为什么日志没有显示消息级别?我不应该期望在我正在记录的info syslog消息中看到“info”吗?
答案 0 :(得分: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>
代表设施和优先级,如section 4.1.1 of the RFC中所述。时间戳在4.1.2中高度指定:简而言之,三个字母的英文月份缩写,没有前导0
- 而是一个前导空格:Aug__8
而不是Aug_8
(使用下划线,因为空格在代码块中崩溃)。主机名不能包含任何域名。 IP地址很好,包括IPv4和IPv6。
您还可以使用Unix域套接字(unix(7)
),例如/dev/log
。这比UDP更可靠。
答案 1 :(得分:0)
不幸的是,如果您在本地登录,我不相信可以指定主机名。
此外,您不应该在日志前面看到“信息”。日志级别会影响消息的发送位置(您可以在/etc/syslog.conf中对其进行自定义)。默认情况下,LOG_INFO和LOG_WARNING转到/var/log/messages.log,LOG_EMERG和LOG_ERR转到/var/log/errors.log。级别不会出现在输出中。