RFC3164メッセージを受け入れるSyslog実装は、メッセージの最初の部分("foo:"
例では)をTAGとして認識する必要があります。
MSGパーツには、TAGフィールドとCONTENTフィールドと呼ばれる2つのフィールドがあります。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')
..これをsyslogソケットに送信します
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になると、このソリューションはおそらく壊れます。