[syslog-ng] flags(final)

Michael J. Bauer mjbauer at eecs.tufts.edu
Thu Nov 12 17:47:36 CET 2009


Balazs Scheidler wrote:
> On Fri, 2009-11-06 at 17:06 -0500, Michael J. Bauer wrote:
>   
>> flags(final) is now working with my rewritten match() statements.  I 
>> wonder if it was a combination of the older version I was initially 
>> running and the odd structure of the log entry I was trying to use, but 
>> I really am disinclined to try to chase it down.
>>
>> However, in rewriting things, I did discover something else.
>>
>> In cutting and pasting, I had accidentally done this in my config:
>>
>> destination d_dhcpd {
>>         file("/var/log/dhcpd"
>>                 flush_lines(10)
>>                 flush_timeout(1000));
>> };
>>
>> destination d_dhcpd {
>>         file("/var/log/named"
>>                 flush_lines(10)
>>                 flush_timeout(1000));
>> };
>>
>> filter f_dhcpd {
>>         match("dhcpd" value(PROGRAM));
>> };
>>
>> filter f_named {
>>         match("named" value(PROGRAM));
>> };
>>
>> log {
>>         source(s_sys);
>>         filter(f_dhcpd);
>>         destination(d_dhcpd);
>>         flags(final);
>> };
>>
>> log {
>>         source(s_sys);
>>         filter(f_named);
>>         destination(d_named);
>>         flags(final);
>> };
>>
>> log {
>>         source(s_sys);
>>         destination(d_default);
>>         flags(fallback);
>> };
>>
>> Note the log statement containing the non-existent 
>> destination(d_named).  When I ran "/etc/init.d/syslog-ng reload", it 
>> didn't crash, nor did it throw any error where I could see it.  What it 
>> did do was start logging multiple copies of each line going to 
>> destination(d_default), apparently one more line each time I did a 
>> reload.  I didn't notice what was going on until it was at 8 copies of 
>> each line, and it took me until 17 copies of each line to finally give 
>> up and run "/etc/init.d/syslog-ng stop; /etc/init.d/syslog-ng start".  
>> Once I did that, I got an error and corrected the problem.
>>
>> This is probably an obscure bug, but it may be worth looking at.  It was 
>> certainly entertaining after the fact.
>>
>> MJB
>>
>> Michael J. Bauer wrote:
>>     
>>> I think I am misunderstanding what flags(final) is supposed to do.  I'm 
>>> running syslog-ng 2.1.4 on RHEL 5.4 (Tikanga).
>>>
>>> I have a fairly simple syslog-ng configuration, which I've attached 
>>> below.  I'm trying to pick off individual groups of log entries and put 
>>> them in their own individual files.  I want to ensure that each gets 
>>> logged exactly once, so I'm using flags(final).  I also have a catch-all 
>>> at the end in case I've missed something, but the ultimate goal is to 
>>> have that file present, but empty.
>>>
>>> However, with this configuration, the log entries that appear in 
>>> d_network_address_translation (/var/log/network-address-translation) 
>>> also appear in d_default (/var/log/default) despite the presence of 
>>> flags(final) on an earlier log() line.  Should it work this way?  If so, 
>>> what can I do to get the desired behavior?
>>>
>>> Thanks,
>>> MJB
>>>
>>> options {
>>>         sync (0);
>>>         time_reopen (10);
>>>         log_fifo_size (1000);
>>>         long_hostnames (off);
>>>         use_fqdn (no);
>>>         create_dirs (no);
>>>         keep_hostname (yes);
>>> };
>>>
>>> source s_sys {
>>>         file ("/proc/kmsg" log_prefix("kernel: "));
>>>         unix-stream ("/dev/log");
>>>         internal();
>>>         udp(ip(0.0.0.0) port(514));
>>> };
>>>
>>> destination d_network_address_translation              { 
>>> file("/var/log/network-address-translation"); };
>>> destination d_default          { file("/var/log/default"); };
>>>
>>> filter f_network_address_translation { host("router-service-interface") and
>>>                                        priority(info) and
>>>                                        facility(local2) and
>>>                                        match("FWNAT"); };
>>>
>>> log { source(s_sys);
>>>       filter(f_network_address_translation);
>>>       destination(d_network_address_translation);
>>>       flags(final); };
>>> log { source(s_sys);
>>>       destination(d_default); };
>>>
>>>       
>
> I had one similar report already, but is only in our internal bugzilla.
> If you have an unexisting destination reference and reload the
> configuration, then something that you describe may happen.
>
> I once tried to track it down, but it wasn't trivial, so I stopped and
> this bug fell on the floor.
>
>   
OK, just so that it's known.  Meanwhile, I know what to look for if I 
see this again.

Thanks,
MJB


More information about the syslog-ng mailing list