HAProxy Enterprise Documentation 2.5r1

Setting Log Levels

With HAProxy Enterprise you can easily define log levels for your proxies and servers. In addition to the logging configuration you define at the global or proxy level, you can define conditional log levels for individual requests and responses that match specific criteria.

What are log levels?

HAProxy log levels are the same as the severity levels used by the syslog service. HAProxy Enterprise tags each loggable event with a severity level. For example, it categorizes log messages related to connections and HTTP requests with the info severity level. Other events are categorized using one of the other, less verbose levels. From most to least important, the severity levels are:

Severity Level

HAProxy Logs

emerg

Errors such as running out of operating system file descriptors.

alert

Some rare cases where something unexpected has happened, such as being unable to cache a response.

crit

Not used.

err

Errors such as being unable to parse a map file, being unable to parse the HAProxy configuration file, and when an operation on a stick table fails.

warning

Certain important, but non-critical, errors such as failing to set a request header or failing to connect to a DNS nameserver.

notice

Changes to a server's state, such as being UP or DOWN or when a server is disabled. Other events at startup, such as starting proxies and loading modules, are also included. Health check logging, if enabled, also uses this level.

info

TCP connection and HTTP request details and errors.

debug

You may write custom Lua code that logs at this level.

Setting global and default log levels

Including a log level in the global section establishes a definition that can be easily included in other sections using the log global declaration.

global
   log           127.0.0.1 local0            # access logs
   log           127.0.0.1 local1 notice     # administrative logs

defaults
   log global             #inserts global log def here

frontend
   log global             #inserts global log def here

backend
   log global             #inserts global log def here

Setting conditional log levels

To set the log level for individual requests or responses that match specified criteria, you can use these directives:

http-request set-log-level <level> [ { if | unless } <condition> ]

Change the log level of the current request when a certain condition is met.

http-response set-log-level <level> [ { if | unless } <condition> ]

Change the log level of the current response.

tcp-request content set-log-level <level> [ { if | unless } <condition> ]

Change the log level of the current session.

tcp-response content set-log-level <level> [ { if | unless } <condition> ]

Change the log level of the current session.

Using these directives, you can set the log level to any of the eight syslog levels or to the special level silent, which disables logging for this request/response. This rule is not final so the last matching rule wins.

Specify a condition using the syntax defined for ACLs.

You can promote interesting requests to error status to make sure you capture them:

frontend www
    bind :80
    acl failed_request status 400 401 403 404 405 408 429 500 503
    http-response set-log-level err if failed_request

See also


Next up

Logging without Waiting for Session Termination
HAProxyConf 2022 - Call for papers