Drupal is a registered trademark of Dries Buytaert
Release: Leaflet 10.4.11 Minor update available for module leaflet (10.4.11). Release: Session Inspector 1.0.8 Minor update available for module session_inspector (1.0.8). Release: Migrate QA 2.0.4 Minor update available for module migrate_qa (2.0.4). Release: CKEditor Description List 3.0.0 Major update available for module ckeditor_descriptionlist (3.0.0). Release: FlowDrop 2.4.0 Minor update available for module flowdrop (2.4.0). Release: JWT Token Refresh 1.0.4 Minor update available for module jwt_token_refresh (1.0.4). Release: ConReg 1.0.0-beta1 First beta version released for module conreg (1.0.0-beta1). Release: AI Image Studio 1.0.0-beta8 New beta version released for module ai_image_studio (1.0.0-beta8). Usage Milestone: Role Theme Switcher Module role_theme_switcher crossed 1,000 active installs. Module Revived: Decoupled Router 2.0.7 Module decoupled_router updated after 11 months of inactivity (2.0.7).

This module enhances Drupal's error logging by visually displaying nested exceptions in a tree format. It combines the backtraces of the current and any previous exceptions into a clear, hierarchical structure, making it easier to understand the root cause of complex errors.

The module enhances log messages to reveal previous exceptions in a nice graphical format.

It attempts to solve for #3582388: Error::logException() should log previous exceptions.

The backtraces of the current exception and all previous exceptions are combined into a visual tree structure.

Features

The module decorates existing loggers to alter the messages.
Whenever a message was logged with `Error::logException()`, it replaces the `@backtrace_string` placeholder with a tree structure like this:

(The line formatters can be swapped out to show methods, classes or other things.)

 x DomainException
 | Failed to purchase the product.
 |
 | x Caused by: EntityStorageException
 | | Failed to save the entity.
 | |
 | | x Caused by: DatabaseException
 | | | Duplicate primary key.
 | | |
 | | * path/to/Database.php:384
 | | * path/to/InsertQuery.php:123
 | |/
 | * path/to/EntityStorage.php:715
 | * path/to/Entity.php:33
 |/
 * path/to/Shop.php:444
 * index.php:20

Post-Installation

Just enable the module, and the behavior will apply to any logger.
(Not tested with monolog module yet, try for yourself)

Stability?

There will be breaking API changes while this is a sandbox module.
I might rename classes, or even the entire module.

Activity

Tracked releases
2
Tracked since
Apr 2026
Latest release
4 months ago
Releases (12 mo)
2 ▲ from 0
Maintenance
Active

Releases

Version Type Release date
1.0.x-dev Dev Apr 3, 2026
1.0.0-alpha1 Pre-release Apr 3, 2026