Я регистрирую сообщения в syslog с Python's SysLogHandler
. Проблема заключается в том, что startswith
в сочетании с шаблоном, похоже, «съедает» начало строки в журнале.rsyslog шаблон «есть» первая часть сообщения
Rsyslogd - версия 8.4.2, Python 2.7.9 (такое же поведение на 2.7.11). По-видимому, это не происходит на rsyslogd 7.x с Python 2.7.4.
Пример:
#!/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%
из шаблона, кажется, не помогает.