[log] sectionΒΆ

Lumol sends various logging messages while running a simulation. Some of them are informational messages (charge was set to 1.2 for 132 particles), others are warnings or error message (infinite energy!) and some are for debugging purposes.

By default, Lumol prints all the informational, warning and error messages to the standard terminal output. This allows to run the code and redirect the output to a specific file in the usual UNIX way: lumol input.toml > simulation.log.

Lumol also offers more detailed configuration for logging output, for example if you only want to print errors and warnings, and redirect everything else to a file. This configuration happens in the [log] section of the input file. This section can contain either a single output target, or multiple targets.

Example

# Single log target
[log]
target = "lumol.log"

# Multiple log targets
[log]
targets = [
    {target = "lumol.log"},
    {target = "<stdout>", level = "warning"}
]

# Multiple log targets, alternative syntax
[[log.targets]]
target = "lumol.log"

[[log.targets]]
target = "<stdout>"
level = "warning"

For multiple targets, the targets key must be an array of tables (either indicated by two brackets, i.e. [[log.targets]] or by defining the table targets = [{target = ...}, {target = ...}, ...]), containing individual target configuration with the same syntax as a single target.

The only required key is the target key, identifying where to write the messages. It is interpreted as path to a file, except for the two special cases of <stdout> and <stderr> that are used to write messages to the standard terminal output stream or error stream respectively.

# Write all messages to the standard error stream
[log]
target = "<stderr>"

Optional keys are level and append. The level key controls which messages are sent to the specified output and defaults to info. Available levels are the following:

  • error: only error messages;
  • warning: error and warning messages;
  • info: error, warnings and informational messages;

The debug (debug messages) and trace (very verbose debug) are also available, but mainly intended for developers.

The append key is a boolean value (true or false) only used for files, and controls whether to overwrite the file or append new messages at the end of an existing file. It defaults to false, meaning that the file is overwritten by every simulation run.

[log]
# Use multiple targets
targets = [
    # Print warnings to the standard output stream
    {target = "<stdout>", level = "warning"},
    # Save all messages to the 'lumol.log' file
    {target = "lumol.log"},
    # Save debug messages to 'debug.log', keeping the file across simulation
    # runs.
    {target = "debug.log", level = "debug", append = true},
]