Ich protokolliere Nachrichten an Syslog mit Python SysLogHandler
. Das Problem ist, dass startswith
kombiniert mit einer Vorlage den Anfang der protokollierten Zeichenfolge zu "essen" scheint.Rsyslog Vorlage "Essen" den ersten Teil einer Nachricht
Rsyslogd ist Version 8.4.2, Python 2.7.9 (dasselbe Verhalten auf 2.7.11). Es scheint jedoch nicht auf rsyslogd 7.x mit Python 2.7.4 zu passieren.
Beispiel:
#!/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")
Mit dieser rsyslog Konfiguration:
$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
}
Erzeugt die folgenden:
=> /var/log/bar.log <==
2016-06-29T17:29:55.330941+01:00 is foo
Beachten Sie die fehlenden 'Diese' in der Nachricht.
umgekehrt in rsyslog Konfigurationsdatei führt die Verwendung der Vorlage entfernt in:
==> /var/log/bar.log <==
Jun 29 18:19:40 localhost foo:This is foo
%msg:::sp-if-no-1st-sp%
aus der Vorlage entfernen scheint nicht zu helfen.