haproxy/reg-tests/log/log_profiles.vtc
Aurelien DARRAGON f8299bc5ea MINOR: log: "drop" support for log-profile steps
It is now possible to use "drop" keyword for "on" lines under a
log-profile section to specify that no log at all should be emitted for
the specified step (setting an empty format was not sufficient to do so
because only the log payload would be empty, not the log header, thus the
log would still be emitted).

It may be useful to selectively disable logging at specific steps for a
given log target (since the log profile may be set on log directives):

log-profile myprof
  on request format "blabla" sd "custom sd"
  on response drop

New testcase was added to reg-tests/log/log_profiles.vtc
2024-08-19 18:53:01 +02:00

183 lines
4.1 KiB
Text

varnishtest "Test log-profile feature"
feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(3.1-dev0)'"
feature ignore_unknown_macro
barrier b1 cond 4 -cyclic
barrier b2 cond 4 -cyclic
barrier b3 cond 3 -cyclic
barrier b4 cond 2 -cyclic
server s1 {
rxreq
txresp
} -repeat 3 -start
syslog Slg1 -level info {
recv
#rfc5424, no profile and option httplog:
expect ~ ".* haproxy ${h1_pid} .* \"GET / HTTP/1.1\""
barrier b1 sync
recv
#rfc5424, no profile, tcp and option logasap
expect ~ ".* haproxy ${h1_pid} .* \\+0"
barrier b2 sync
} -start
syslog Slg2 -level info {
recv
#rfc5424, logprof1 httplog
expect ~ ".* haproxy ${h1_pid} .* sdclose close"
recv
#rfc5424, logprof2 httplog
expect ~ ".* custom ${h1_pid} .* - txn_close"
barrier b1 sync
recv
#rfc5424, logprof1 tcp logasap
expect ~ ".* haproxy ${h1_pid} .* \\+0"
barrier b2 sync
recv
#rfc5424, logprof1 tcp
expect ~ ".* haproxy ${h1_pid} .* sdclose close"
barrier b3 sync
} -start
syslog Slg3 -level info {
recv
#rfc3164, logprof1 and option httplog
expect ~ "[^:\\[ ]\\[${h1_pid}\\]: close"
barrier b1 sync
recv
#rfc5424, logprof2, tcp and option logasap
expect ~ ".* custom ${h1_pid} .* - txn_connect"
barrier b2 sync
recv
#rfc5424, logprof2 tcp
expect ~ ".* custom ${h1_pid} .* - txn_close"
barrier b3 sync
recv
#rfc5424, logprof2, tcp error
expect ~ ".* custom ${h1_pid} .* error"
barrier b4 sync
} -start
syslog Slg4 -level info {
recv
#rfc5424, logprof3, tcp error (other steps should be dropped)
expect ~ ".* custom ${h1_pid} .* error"
barrier b4 sync
} -start
haproxy h1 -conf {
defaults
timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
log-tag "haproxy"
frontend fe1
bind "fd@${fe_1}"
mode http
option httplog
log udp@${Slg1_addr}:${Slg1_port} format rfc5424 local0
log udp@${Slg2_addr}:${Slg2_port} format rfc5424 profile logprof1 local0
log udp@${Slg2_addr}:${Slg2_port} format rfc5424 profile logprof2 local0
log udp@${Slg3_addr}:${Slg3_port} format rfc3164 profile logprof1 local0
default_backend be
frontend fe2
bind "fd@${fe_2}"
mode tcp
log-format "%B"
option logasap
log udp@${Slg1_addr}:${Slg1_port} format rfc5424 local0
log udp@${Slg2_addr}:${Slg2_port} format rfc5424 profile logprof1 local0
log udp@${Slg3_addr}:${Slg3_port} format rfc5424 profile logprof2 local0
log udp@${Slg4_addr}:${Slg4_port} format rfc5424 profile logprof3 local0
default_backend be_tcp
frontend fe3
bind "fd@${fe_3}"
mode tcp
log-format "%B"
log udp@${Slg2_addr}:${Slg2_port} format rfc5424 profile logprof1 local0
log udp@${Slg3_addr}:${Slg3_port} format rfc5424 profile logprof2 local0
default_backend be_tcp
listen fe4
bind "fd@${fe_4}"
timeout client 5ms
mode http
log-format "%B"
log udp@${Slg3_addr}:${Slg3_port} format rfc5424 profile logprof2 local0
log-profile logprof1
on close format "close" sd "sdclose"
log-profile logprof2
log-tag "custom"
on error format "error"
on any format "%OG"
log-profile logprof3
on error format "error"
on any drop
backend be
mode http
server app1 ${s1_addr}:${s1_port}
backend be_tcp
mode tcp
server app1 ${s1_addr}:${s1_port}
} -start
# requests generators (to trigger log emission)
client c1 -connect ${h1_fe_1_sock} {
txreq -url "/"
rxresp
expect resp.status == 200
} -start -wait
# Wait matching log messages
barrier b1 sync
client c2 -connect ${h1_fe_2_sock} {
txreq -url "/"
rxresp
expect resp.status == 200
} -start -wait
# Wait matching log messages
barrier b2 sync
client c3 -connect ${h1_fe_3_sock} {
txreq -url "/"
rxresp
expect resp.status == 200
} -start -wait
# Wait matching log messages
barrier b3 sync
client c4 -connect ${h1_fe_4_sock} {
# do nothing to trigger an error (fe_4 timeouts after 5ms)
} -start -wait
# Wait matching log messages
barrier b4 sync
syslog Slg1 -wait
syslog Slg2 -wait
syslog Slg3 -wait