Skip to main content
The TON node uses the log4rs framework for logging. Logging is configured using a YAML file specified in the log_config_name field of the node configuration. In the Helm chart, this file is mounted at /main/logs.config.yml. A default configuration is bundled with the chart at files/logs.config.yml and is used if no custom configuration is provided. It can be overridden in one of the following ways:
  • inline in values.yaml;
  • from local file --set-file logsConfig=path;
  • by referencing an existing ConfigMap.

Hot reload

The refresh_rate field instructs log4rs to periodically re-read the configuration file. This allows log levels to be changed without restarting the node – updates are applied within the specified interval.
Supported units: seconds, minutes, hours. If the field is omitted, the config is read only once at startup. This feature can be used during production debugging: temporarily increase a logger’s level to debug, observe the output, then restore the original level without restarting the node.

Appenders

Appenders define where logs are written. Each appender has a unique name, the YAML key, and a kind. Three kinds are supported: rolling_file, console, and file. A TON node can generate a large volume of logs, especially during synchronization, elections, and catch-up. Appender configuration and log levels should be selected accordingly.

rolling_file

The rolling_file appender is the default and recommended option for production. It writes logs to a file with automatic size-based rotation. The chart creates a dedicated logs PersistentVolumeClaim for this appender, ensuring logs remain available locally. Rotation prevents uncontrolled disk usage.
  • The policy section defines when and how rotation occurs.
  • Trigger: size Rotates the log file when it reaches the configured size.
  • Roller: fixed_window Renames archived files using a pattern with a sliding index. Example configuration:
    • pattern: "/logs/output_{}.log"
    • base: 1
    • count: 4
    On rotation:
    1. output.log is renamed to output_1.log
    2. output_1.logoutput_2.log
    3. output_2.logoutput_3.log
    4. output_3.logoutput_4.log
    5. The previous output_4.log is deleted
    Add .gz to the pattern to enable compression of archived logs:
Storage sizing: The Helm value storage.logs.size defines the size of the PVC mounted at /logs. Rotation settings must fit within this limit. Example of default configuration:
  • limit: 25 gb
  • count: 4
Maximum disk usage is 1 active file + 4 archived files = 5 × 25 GB = 125 GB The default storage.logs.size is 150Gi (~161 GB), providing headroom. If rotation limits are reduced, for example, 1 GB × 10 archives with .gz compression, actual disk usage is lower, allowing a smaller volume size.

console

The console appender writes logs to stdout or stderr. It is suitable when the cluster uses a log collection stack such as Loki, Fluentd, or Elasticsearch, and log storage is handled externally. At debug or trace levels, log volume can be high and may overload the collector. Log levels should be configured accordingly. When using console-only logging, disable the logs volume by setting storage.logs.enabled to false.

file

The file appender writes logs to a file without rotation. The file grows indefinitely and may exhaust disk space. Use rolling_file instead.

filters

filters may be attached to any appender for additional message filtering. Here, threshold filter discards messages below the specified level.

Encoder (log format)

Each appender uses an encoder to format log entries. The default encoder kind is pattern:

Format specifiers

Example output

Loggers

Root logger

The root logger is the default logger. All log records not matched by a named logger are processed by it.

Named loggers

Named loggers configure log levels for specific components. The logger name must match the target used in the node code.
Loggers form a hierarchy using ::. For example:
  • node;
  • node::network is a child of node.
If additive: true, messages logged by node::network are written to:
  • the appenders configured for node::network;
  • the appenders of node;
  • the appenders of the root logger.

Log levels

Ordered from most to least verbose:

Available logger targets

The following targets can be configured in the loggers section: