0
我使用Python的SysLogHandler
將消息記錄到syslog。問題是startswith
與模板結合似乎「吃」記錄字符串的開始。rsyslog模板「吃」消息的第一部分
Rsyslogd是版本8.4.2,Python 2.7.9(2.7.11上的相同行爲)。但是,它似乎沒有發生在Python 2.7.4的rsyslogd 7.x上。
實施例:
#!/usr/bin/env python
import logging
from logging.handlers import SysLogHandler
my_fmt = logging.Formatter('%(name)s:%(message)s', '%Y-%m-%d %H:%M:%S')
foo_handler = SysLogHandler(address='/dev/log', facility=SysLogHandler.LOG_LOCAL5)
foo_handler.setLevel(logging.INFO)
foo_handler.setFormatter(my_fmt)
foo = logging.getLogger('foo')
foo.setLevel(logging.INFO)
foo.addHandler(foo_handler)
foo.propagate = False
foo.info("This is foo")
利用這種rsyslog現在配置:
$template myt,"%TIMESTAMP:::date-rfc3339%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
if $syslogfacility-text == "local5" then {
if $msg startswith "foo" then {
action(type="omfile" file="/var/log/foo.log" template="myt")
} else {
action(type="omfile" file="/var/log/bar.log" template="myt")
}
stop
}
產生如下:
=> /var/log/bar.log <==
2016-06-29T17:29:55.330941+01:00 is foo
通知丟失的 '這個' 在消息中。
相反,除去使用rsyslog現在配置文件的結果模板:
==> /var/log/bar.log <==
Jun 29 18:19:40 localhost foo:This is foo
去除模板%msg:::sp-if-no-1st-sp%
似乎並沒有幫助的。