Syslog-ng logs sent to multiple destination

syslogsyslog-ng

I'm getting remote nginx syslogs going to both /var/log/nginx and /var/log/splunk on my syslog-ng server. How do I only get it to go to /var/log/nginx?

#/etc/syslog-ng/syslog-ng.conf
source s_sys {
    system();
    internal();
    udp(ip(0.0.0.0) port(514));
};

destination d_splunk { file("/var/log/splunk/$HOST-$PROGRAM-$YEAR-$MONTH-$DAY.log"); };
destination d_nginx { file("/var/log/nginx/$HOST-$PROGRAM-$YEAR-$MONTH-$DAY.log"); };

filter f_nginx   { program(nginx); };
filter f_default    { level(info..emerg) and
                        not (facility(mail)
                        or facility(authpriv)
                        or facility(cron)); };

log { source(s_sys); filter(f_nginx); destination(d_nginx); };
log { source(s_sys); destination(d_splunk); };

Best Answer

use the 'final' flag in the nginx log path:

log { source(s_sys); filter(f_nginx); destination(d_nginx); flags(final); };

For details, see https://syslog-ng.com/documents/html/syslog-ng-ose-latest-guides/en/syslog-ng-ose-guide-admin/html/reference-logflags.html