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