忽略了 HAProxy 日志格式指令

HAProxy log-format directive ignored

我最近升级到 haproxy 1.6.3,并且我为所有 HTTP/TCP 请求提供了默认的 log-format 指令,如下所示:

defaults
    log-format %hr\ %ST\ %B\ %Ts
    log     global
    mode    http
    option  dontlognull
    retries 3
    option redispatch
    option http-server-close
    maxconn 2000
    timeout client 3600s
    timeout server 3600s
    timeout connect 5s
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http

但是,当我重新启动服务器并开始写入日志条目时,它们是使用 haproxy 的默认 HTTP/TCP 日志格式写入的:

Feb 8 14:55:41 localhost haproxy[6770]: host - - [08/Feb/2016:21:55:41 +0000] "POST /path/to/service/1.0 HTTP/1.1" 200 841 "" "" 43359 499 "frontend" "backend" "server" 0 0 0 22 22 ---- 0 0 0 0 0 0 0 "" ""

Feb 8 14:54:05 localhost haproxy[6771]: host:port [08/Feb/2016:14:54:05.469] frontend backend 1/0/4 147 -- 0/0/0/0/0 0/0

为什么我的 log-format 被忽略了?我在重启时没有收到任何警告或警报。

尽管我在默认部分配置了 log-format 指令,但仍有一些前端设置了 option tcplogoption httplog clf,它们覆盖了我配置的日志格式。

这里的haproxy documentation有点误导:

This directive specifies the log format string that will be used for all logs resulting from traffic passing through the frontend using this line. If the directive is used in a defaults section, all subsequent frontends will use the same log format.