module( load="imuxsock" SysSock.Name="{{ configuration['log-socket'] }}") # Just simply output the raw line without any additional information, as # haproxy emits enough information by itself # Also cut out first empty space in msg, which is related to rsyslogd # internal and end up cutting on 8k, as it's default of $MaxMessageSize template(name="rawoutput" type="string" string="%msg:2:8192%\n") $ActionFileDefaultTemplate rawoutput $FileCreateMode 0600 $DirCreateMode 0700 $Umask 0022 $WorkDirectory {{ configuration['spool-directory'] }} # Setup logging per slave, by extracting the slave name from the log stream {%- set regex = "^\\\\s*\\\\{(\\\\S.*)-https{0,1}\\\\} (.*)!!!(.*)" %} # Extract file name part from 1st match template(name="extract_slave_name" type="string" string="%msg:R,ERE,1,FIELD:{{ regex }}--end%") set $!slave_name = exec_template("extract_slave_name"); # Frontend output - the HAProxy's like httplog template(name="frontend_output" type="string" string="{{ configuration['slave-log-directory'] }}/%$!slave_name%_frontend_log") template(name="haproxy_frontend_line" type="string" string="%msg:R,ERE,2,FIELD:{{ regex }}--end%\n") # Access output - the Apache's CLF template(name="access_output" type="string" string="{{ configuration['slave-log-directory'] }}/%$!slave_name%_access_log") template(name="haproxy_access_line" type="string" string="%msg:R,ERE,3,FIELD:{{ regex }}--end%\n") # React on match if (re_match($msg, '{{ regex }}')) then { action(type="omfile" dynaFile="frontend_output" template="haproxy_frontend_line") action(type="omfile" dynaFile="access_output" template="haproxy_access_line") stop } {#- emit all not catched messages to full log file #} *.* {{ configuration['log-file'] }}