Skip to content

Understanding EasyBuild logs

EasyBuild thoroughly keeps track of the executed build and install procedures. This page details some of the specifics, to help you making sense of them.

Basic information

During an invocation of the eb command, a temporary log file is provided. This log can be consulted in case any problems occur during the process. Right before completing successfully, EasyBuild will clean up this temporary log file.

A separate log file is created for each build and install procedure that is performed. After each successful installation, this application log file is copied to the install directory for future reference.

By default, the application log file is copied to a subdirectory of the installation prefix named easybuild, and has a filename like easybuild-WRF-4.4.1-20230426.143346.log for example, which corresponds to the filename template easybuild-%(name)s-%(version)s-%(date)s.%(time)s.log. This aspect can be tweaked via the --logfile-format configuration option.

Example:

$ eb WRF-4.4.1-foss-2022b-dmpar.eb
== Temporary log file in case of crash /tmp/eb-1zbqix6e/easybuild-1ixy86r2.log
[...]
== building and installing WRF/4.4.1-foss-2022b-dmpar...
[...]
== COMPLETED: Installation ended successfully
== Results of the build can be found in the log file(s) /home/example/.local/easybuild/software/WRF/4.4.1-foss-2022b-dmpar/easybuild/easybuild-WRF-4.4.1-20230531.181321.log
== Build succeeded for 1 out of 1
== temporary log file /tmp/eb-1zbqix6e/easybuild-1ixy86r2.log* has been removed.
== temporary directory /tmp/eb-1zbqix6e has been removed.

Note

Enabling debug mode using the --debug or -d command line option ensures that all details of the executed build and installation procedure are included in the log file, but will also result is significantly bigger and more verbose logs.

Tip

Always include a reference to a log file (even if partial) when reporting a potential bug in EasyBuild. A particularly useful way of doing so is by creating a Gist (https://gist.github.com/), and sharing the corresponding URL. This is much better than sending a lengthy log file via email, since it can be easily shared across different communication channels (mailing list, IRC, IM, etc.).

Extracting the information you're interested in from an EasyBuild log file may be a daunting task, especially for debug logs. The information and guidelines in this section should make navigating logs less scary.

Log message format

Each log message as emitted by EasyBuild follows a well-defined format. Example:

== 2023-05-31 16:11:21,044 easyblock.py:313 INFO This is EasyBuild 4.7.3 (framework: 4.7.3, easyblocks: 4.7.3) on host example.

Each log line consists of the following parts:

  • a prefix label ==, which is useful to discriminate between EasyBuild log messages and the output of executed shell commands;
  • date and time information (e.g., 2023-05-31 16:11:21,044);
  • the Python module/class/function that is responsible for the log message (e.g., easyblock.py:313);
  • the log level (e.g., INFO);
  • and a string with the actual log message at the end

Useful handles in log files

Next to looking for a particular search pattern (e.g., [Ee]rror), there are a couple of handles that can be used to jump around in log files.

Step markers

For each step performed in the build and installation process, corresponding log messages is emitted. For example:

== 2023-05-31 16:11:44,977 build_log.py:267 INFO configuring...
== 2023-05-31 16:11:44,981 easyblock.py:3926 INFO Starting configure step
[...]
== 2023-05-31 16:11:44,982 easyblock.py:3934 INFO Running method configure_step part of step configure

This allows you to navigate a log file step by step, for example using the _step search pattern.

Executed shell commands

For each executed shell command, log messages are included with the full command line, the location where the command was executed and the command's output and exit code. For example:

== 2023-05-31 18:59:24,222 run.py:176 DEBUG run_cmd: Output of "/home/example/.local/easybuild/software/WRF/4.4.1-foss-2022b-dmpar/WRF-4.4.1/compile -j 8 wrf" will be logged to /tmp/eb-1zbqix6e/easybuild-run_cmd-ueqo5bn0.log
== 2023-05-31 18:59:24,225 run.py:217 DEBUG run_cmd: running cmd /home/example/.local/easybuild/software//WRF/4.4.1-foss-2022b-dmpar/WRF-4.4.1/compile -j 8 wrf (in /home/example/.local/easybuild/software//WRF/4.4.1-foss-2022b-dmpar/WRF-4.4.1)
[...]
== 2023-05-31 20:06:35,979 run.py:650 DEBUG cmd "/home/example/.local/easybuild/software/WRF/4.4.1-foss-2022b-dmpar/WRF-4.4.1/compile -j 8 wrf" exited with exit code 0 and output:

If you are primarily interested in the different commands as they were executed by EasyBuild, you can use INFO cmd (or run_cmd, in debug logs) as a search pattern.

Note

Next to the configure/build/install commands, EasyBuild also runs a couple of other commands to obtain system information, or to query the modules tool. Typically, a single invocation of eb involves executing a dozen or so different shell commands, minimally.