[syslog-ng]$HOST $YEAR, etc not working correctly..

Balazs Scheidler syslog-ng@lists.balabit.hu
Thu, 04 Mar 2004 13:42:44 +0100


2004-03-03, sze keltezéssel 20:07-kor Doug Peterson ezt írta:
> --- Balazs Scheidler <bazsi@balabit.hu> wrote:
> > 2004-02-25, sze keltezssel 21:16-kor Doug Peterson ezt rta:
> > > --- Balazs Scheidler <bazsi@balabit.hu> wrote:
> > > > 
> > > > strange, the problem seems to be that you reference marcos like
> > > > $YEAR_$MONTH_
> > > > 
> > > > which is interpeted as $YEAR_ concatenated with $MONTH_, these are
> > > > undefined macros, thus are expanded to an empty string.
> > > > 
> > > > Try escaping the underscore with a backslash, like
> > > > 
> > > > $YEAR\_$MONTH\_
> > > 
> > > 
> > > I escaped out the _ characters, and am still getting the same results with 1.6.2.. files are
> > being
> > > written as messages_25 (25 being $DAY)
> > > 
> > > My rules now look like this:
> > > 
> > > destination messages.network {
> > > file("/var/log/hosts/$HOST/$YEAR/$MONTH/$DAY/messages\_$HOST\_$YEAR\_$MONTH\_$DAY"
> > >                                 owner(root) group(sysadmin) perm(0640) dir_perm(0700)
> > > create_dirs(yes) ); };
> > 
> > 
> > This definitely works here. syslog-ng uses gperf to generate a lookup
> > hash for macro names. A generated file is shipped with syslog-ng to
> > avoid the build dependency on gperf, but maybe it was regenerated for
> > some reason.
> > 
> > This area had a bug in 1.6.0rc2 (before or after this version should be
> > ok), are you sure you are running 1.6.2?
> > 
> > -- 
> > Bazsi
> 
> I am running: syslog-ng 1.6.0rc1 currently, and that is the most recent version that works (I'm
> not sure if I tried rc2). 
> 
> When I install 1.6.2 I encounter the macro problem, even when I escape the underscore. 

I think I now understand the nature of the problem. The lexer strips off
a single '\' from strings, e.g. you need

destination d_file { file("/var/log/messages/$HOST\\_$YEAR\\_" ); };

This is very similar to how the C language works.

-- 
Bazsi
PGP info: KeyID 9AF8D0A9 Fingerprint CD27 CFB0 802C 0944 9CFD 804E C82C 8EB1