[syslog-ng] Can TAG field be terminated by space?

Balazs Scheidler bazsi at balabit.hu
Sun Dec 30 10:21:50 CET 2007


On Sat, 2007-12-29 at 10:00 -0800, Evan Rempel wrote:
> > On Tue, 2007-10-23 at 18:50 +0200, Balazs Scheidler wrote:
> >> On Mon, 2007-10-22 at 18:26 +0900, Tsurusawa Takeshi wrote:
> >>>
> >>>    The TAG is a string of
> >>>    ABNF alphanumeric characters that MUST NOT exceed 32 characters.  Any
> >>>    non-alphanumeric character will terminate the TAG field and will be
> >>>    assumed to be the starting character of the CONTENT field.  Most
> >>>    commonly, the first character of the CONTENT field that signifies the
> >>>    conclusion of the TAG field has been seen to be the left square
> >>>    bracket character ("["), a colon character (":"), or a space
> >>>    character.
> >>>
> >>> Is it possible to change this behavior of syslog-ng?
> >>
> >> I'm usually reluctant to make such changes as it is very easy to create
> >> regressions when changing the log parsing code.
> >>
> >> However there were two similar cases in the message parsing code that
> >> used different TAG terminator characters, thus I unified the two. (one
> >> was using space as separator).
> >>
> >> Here's the patch:
> >>
> >> http://git.balabit.hu/?p=bazsi/syslog-ng-2.0.git;a=commit;h=4a84d904fe0fc5b3627773bafe6966ad9037386d
> >>
> >> tomorrow's snapshot should also contain the change.
> >>
> >
> > As I feared somewhat this change caused a regression for programs that
> > intentionally use "/" in the name of the program. Such an example is
> > "postfix"
> >
> > I've changed this patch, a program name is terminated by either of the
> > following characters: space, '[' and ':'. This still achieves what you
> > originally wanted, but still does not match the RFC as that causes
> > trouble.
> >
> > The two code paths using different characters were also unified to use
> > this three characters.
> 
> Wow, this is a can of worms.
> 
> If I use a template of
> 
> $PRI $DATE $HOST $FACILITY.$PRIORITY $PROGRAM: $MSGONLY
> 
> it should recreate the entire syslog message, but it will not.
> The information inside of the [xxx] of the program will be
> dropped (or will it be part of the MSGONLY?

No, but if you used:

$PRI $DATE $HOST $FACILITY.$PRIORITY $MSG

This will contain all of program/pid and message in its original
formatting.

> 
> If you want to exclude the [xxx] from the PROGRAM macro then I think
> that a new macro is required that will contain the [xxx] component.
> Perhaps INSTANCE or IDENTIFIER or UNIQUE. 

There's a macro called $PID, but it is not always set as the pid part is
optional.

> I don't have the RFC
> in front of me, but using the terminology that the RFC uses
> would be good. The I can write a template of
> 
> $PRI $DATE $HOST $FACILITY.$PRIORITY $PROGRAM[$INSTANCE]: $MSGONLY
> 
> to recreate the syslog record.
> 
> An what about if the INSTANCE is not present in the record....

$MSG ?

> Perhaps we need a conditional template? Currently two
> destinations with the same endpoint, that use different templates
> and different filters can be used to accomplish this, but it
> gets convoluted very quickly.

I don't want to complicate templates() even further. $MSG does the trick
IMHO.

-- 
Bazsi



More information about the syslog-ng mailing list