Chapter 3. Setting runtime configuration

You can configure logging levels and logging categories settings in the application.properties file.

Logging categories are hierarchical. When you set a logging level for a category, the configuration applies to all sub-categories of that category.

There are two logging level settings: logging level and minimum logging level. The default logging level is INFO, the default minimum logging level is DEBUG. You can adjust both either globally, using the quarkus.log.level and quarkus.log.min-level property, or by category.

When you set the logging level below the minimum logging level, you must adjust the minimum logging level as well. Otherwise, the value of minimum logging level overrides the logging level.

Excessive logging has performance implications. You can adjust the minimum logging level to collect only relevant data about your application. Reducing log volume potentially optimize memory usage and improves the performance of your application. For example, in native execution the minimum level enables lower level checks (isTraceEnabled) to be folded to false, which results in dead code elimination.

Procedure

  • Configure the logging in your application.properties file:

    src/main/resources/application.properties

    <configuration_key>=<value>

    The following example shows how to set the default logging level to INFO logging and include Hibernate DEBUG logs:

    src/main/resources/application.properties

    quarkus.log.level=INFO
    quarkus.log.category."org.hibernate".level=DEBUG

    Note

    When you set configuration properties via command line, make sure you escape ". For example -Dquarkus.log.category.\"org.hibernate\".level=TRACE.

3.1. Configuring logging format

Quarkus uses a pattern-based logging formatter that generates human-readable text logs. The log entry displays the timestamp, the logging level, the class name, the thread ID and the message. You can customize the format for each log handler using a dedicated configuration property.

Prerequisites

  • Have a Quarkus Maven project.

Procedure

  • Set a value for the quarkus.log.console.format to configure the console handler:

    src/main/resources/application.properties

    quarkus.log.console.format=<logging_format_string>

    src/main/resources/application.properties

    quarkus.log.console.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n

    This configuration results in the following log message formatting:

    14:11:07 INFO  [ExampleResource] (executor-thread-199) Hello

3.1.1. Logging format strings

The following table shows the logging format string symbols that you can use to configure the format of log messages.

Table 3.1. Supported logging format symbols

SymbolSummaryDescription

%%

%

A simple % character.

%c

Category

The category name

%C

Source class

The source class name [a]

%d{xxx}

Date

Date with the given date format string, that follows the java.text.SimpleDateFormat

%e

Exception

The exception stack trace

%F

Source file

The source file name [a]

%h

Host name

The system simple host name

%H

Qualified host name

The fully qualified host name of the system. Depending on the OS configuration it might be the same as the simple host name.

%i

Process ID

The current process PID

%l

Source location

The source location (source file name, line number, class name, and method name) [a]

%L

Source line

The source line number [a]

%m

Full Message

The log message including exception trace

%M

Source method

The source method name [a]

%n

Newline

The platform-specific line separator string

%N

Process name

The name of the current process

%p

Level

The logging level of the message

%r

Relative time

The relative time in milliseconds since the start of the application log

%s

Simple message

The log message without exception trace

%t

Thread name

The thread name

%t{id}

Thread ID

The thread ID

%z{<zone name>}

Time zone

The time zone of the output in the <zone name> format

%X{<MDC property name>}

Mapped Diagnostics Context Value

The value from Mapped Diagnostics Context

%X

Mapped Diagnostics Context Values

All the values from Mapped Diagnostics Context in format {property.key=property.value}

%x

Nested Diagnostics context values

All the values from Nested Diagnostics Context in format {value1.value2}

[a] Format sequences that examine caller information might affect performance.

3.2. Logging categories setting

You can use logging categories to organize log messages based on their severity or based on the component that they belong to. You can configure each category independently.

For every category the same settings applies to console, file, and syslog. You can override the settings by attaching one or more named handlers to a category.

Table 3.2. Logging categories configuration properties

Property NameDefaultDescription

quarkus.log.category."<category-name>".level

INFO [a]

The level to configure the <category-name> category.

quarkus.log.category."<category-name>".min-level

DEBUG

The minimum logging level to configure the <category-name> category.

quarkus.log.category."<category-name>".use-parent-handlers

true

Enable the logger to send its output to the parent logger.

quarkus.log.category."<category-name>".handlers=[<handler>]

empty [b]

The names of the handlers that you want to attach to a specific category.

[a] Some extensions define customized default logging levels for certain categories to reduce log noise. Setting the logging level in configuration overrides any extension-defined logging levels.
[b] By default, the configured category inherits all the attached handlers from the root logger category.
Note

You must place logging category names inside double quotes (") when using them in the names of properties to escape the periods (.) that are typically part of the category names.

3.3. Logging levels

You can use logging levels to categorize logs by severity or by their impact on the health and stability of your Quarkus application. Logging levels let you filter the critical events from the events that are purely informative.

Table 3.3. Quarkus supports the following logging levels:

Logging levelDescription

OFF

Special level to turn off logging.

FATAL

A critical service failure or an inability to complete a service request.

ERROR

A significant disruption in a request or the inability to service a request.

WARN

A non-critical service error or a problem that might not require immediate correction.

INFO

Service lifecycle events or important related very-low-frequency information.

DEBUG

Messages that convey extra information regarding lifecycle or non-request-bound events which may be helpful for debugging.

TRACE

Messages that convey extra per-request debugging information that may be very high frequency.

ALL

Special level for all messages including custom levels.

Note

Additionally, you can use the logging level names described by the java.util.logging package.

3.4. Root logger configuration

The root logger category is at the top of the logger hierarchy. The root logger captures all log messages of the specified logging level or higher that are sent to the server and are not captured by a logging category. The root logger category is configured at the top level of the logging configuration.

Table 3.4. Root logger configuration properties

Property NameDefaultDescription

quarkus.log.level

INFO

The default logging level for every logging category.

quarkus.log.min-level

DEBUG

The default minimum logging level for every logging category.

3.5. Quarkus log handlers

A log handler is a logging component that sends log events to a recipient. Quarkus includes the following log handlers:

Console log handler
The console log handler is enabled by default. It outputs all log events to the console of your application (typically to the system’s stdout).
File log handler
The file log handler is disabled by default. It outputs all log events to a file on the application’s host. The file log handler supports log file rotation.
Syslog log handler
Syslog is a protocol for sending log messages on Unix-like systems. The specifications of the syslog protocol are defined in RFC 5424.

The syslog handler sends all log events to a syslog server (by default, the syslog server runs on the same host as the application). The syslog handler is disabled by default.

3.6. Example logging configuration

This section shows examples of how you can configure logging for your Quarkus project.

src/main/resources/application.properties

# Format log messages to have shorter time and shorter category prefixes.
quarkus.log.console.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n

# Remove color from log messages.
quarkus.log.console.color=false

# Enable console DEBUG logging with the exception of Quarkus logs that have a logging level set to INFO.
quarkus.log.console.level=DEBUG
quarkus.log.category."io.quarkus".level=INFO

src/main/resources/application.properties

# Enable file logging and set a path to the log file.
quarkus.log.file.enable=true
quarkus.log.file.path=/tmp/trace.log

# Enable TRACE log messages in a log file.
quarkus.log.file.level=TRACE

# Set a format for the log file output.
quarkus.log.file.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n

# Set logging level to TRACE for specific categories.
quarkus.log.category."io.quarkus.smallrye.jwt".level=TRACE
quarkus.log.category."io.undertow.request.security".level=TRACE

Note

By default, the root logger level is set to INFO. When you want to collect logs for lower levels, such as DEBUG or TRACE, you need to change the root logger configuration.

src/main/resources/application.properties

# Set path to the log file.
quarkus.log.file.path=/tmp/trace.log

# Configure console format.
quarkus.log.console.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n

# Configure a console log handler.
quarkus.log.handler.console."STRUCTURED_LOGGING".format=%e%n

# Configure a file log handler.
quarkus.log.handler.file."STRUCTURED_LOGGING_FILE".enable=true
quarkus.log.handler.file."STRUCTURED_LOGGING_FILE".format=%e%n

# Configure the category and associate it with the two named handlers.
quarkus.log.category."io.quarkus.category".level=INFO
quarkus.log.category."io.quarkus.category".handlers=STRUCTURED_LOGGING,STRUCTURED_LOGGING_FILE