接受RFC3164消息的Syslog 实现应该将消息的第一部分("foo:"
在示例中)识别为 TAG。
MSG 部分有两个字段,称为 TAG 字段和 CONTENT 字段。TAG 字段中的值将是生成消息的程序或进程的名称。
Python代码..
import logging
from logging.handlers import SysLogHandler
h = SysLogHandler(address='/dev/log')
h.setFormatter(logging.Formatter('foo: %(message)s'))
logging.getLogger().addHandler(h)
logging.error('bar')
..将其发送到系统日志套接字
connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 10) = 0
sendto(3, "<11>foo: bar\0", 13, 0, NULL, 0) = 13
close(3)
这反过来又在 systemd 的日志中产生。
Dec 13 14:48:20 laptop foo[1928]: bar
日志消息详细信息:
{
..
"PRIORITY" : "3",
"SYSLOG_FACILITY" : "1",
"SYSLOG_IDENTIFIER" : "foo",
"MESSAGE" : "bar",
"_PID" : "1928",
}
它适用于 Py2.6、2.7、3.4、3.5 和 Systemd 的 syslog 服务器。它也可以与其他 syslog 实现(如果它们接受 RFC3164)消息一起使用。当 python 的 SysLogHandler 默认为较新的 RFC5424 时,此解决方案可能会中断。