PHPackages                             detain/tracy-monolog-adapter - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. detain/tracy-monolog-adapter

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

detain/tracy-monolog-adapter
============================

Bridges the Tracy debugger with the Monolog logger so Tracy log output is routed through Monolog handlers and processors.

v2.0.0(7y ago)4577[1 issues](https://github.com/detain/tracy-monolog-adapter/issues)[1 PRs](https://github.com/detain/tracy-monolog-adapter/pulls)BSD-3-ClausePHPPHP &gt;=5.4

Since May 24Pushed 6d agoCompare

[ Source](https://github.com/detain/tracy-monolog-adapter)[ Packagist](https://packagist.org/packages/detain/tracy-monolog-adapter)[ Docs](https://github.com/detain/tracy-monolog-adapter)[ RSS](/packages/detain-tracy-monolog-adapter/feed)WikiDiscussions master Synced yesterday

READMEChangelog (1)Dependencies (3)Versions (5)Used By (0)

Detain Tracy-Monolog Adapter
============================

[](#detain-tracy-monolog-adapter)

[![Downloads this Month](https://camo.githubusercontent.com/3013772b332e0bbab357bcdf8c422e16c5e64b436832e5777eb2e996a04f4e6f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646d2f64657461696e2f74726163792d6d6f6e6f6c6f672d616461707465722e7376673f7374796c653d666c6174)](https://packagist.org/packages/detain/tracy-monolog-adapter)[![Stable version](https://camo.githubusercontent.com/5f204fa3274a7d30786b51aaeeb29028c32f929c0437ddb29b4867f31220f1be/687474703a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f64657461696e2f74726163792d6d6f6e6f6c6f672d616461707465722e7376673f7374796c653d666c6174)](https://packagist.org/packages/detain/tracy-monolog-adapter)[![License](https://camo.githubusercontent.com/949c63126fce0e90d46c42e9cd297516a1d19d78e5166f10173c493c32333f60/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f64657461696e2f74726163792d6d6f6e6f6c6f672d616461707465722e7376673f7374796c653d666c6174)](license.md)

A small bridge that lets the [Tracy](https://tracy.nette.org/) debugger log through a [Monolog](https://github.com/Seldaek/monolog) logger so you can route Tracy's log calls (warnings, errors, exceptions) through any Monolog handler, processor or formatter you already use.

Includes:

- `Detain\TracyHasMono\TracyMonoLogger` — a `Tracy\ILogger` implementation backed by a `Monolog\Logger`.
- `Detain\TracyHasMono\Processors\TracyExceptionProcessor` — a Monolog processor that renders any `Throwable` found in a record's context as a Tracy BlueScreen HTML file.
- `Detain\TracyHasMono\Bridges\NetteDI\MonologExtension` — an optional Nette DI compiler extension that wires everything into a container.
- `Nextras\TracyMonologAdapter\Logger` — a legacy alias kept for backwards compatibility with code that still imports the old namespace.

Requirements
------------

[](#requirements)

DependencyVersionPHP`>=8.1``tracy/tracy``^2.10``monolog/monolog``^3.0``nette/di``^3.0` (only for the Nette DI bridge)Installation
------------

[](#installation)

```
composer require detain/tracy-monolog-adapter
```

Usage
-----

[](#usage)

### Plain PHP

[](#plain-php)

Wire a Monolog logger and pass it to `TracyMonoLogger`, then register the result with Tracy's `Debugger`.

```
use Detain\TracyHasMono\Processors\TracyExceptionProcessor;
use Detain\TracyHasMono\TracyMonoLogger;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Logger;
use Tracy\BlueScreen;
use Tracy\Debugger;

require __DIR__ . '/vendor/autoload.php';

$logDir = __DIR__ . '/log';

Debugger::enable(Debugger::PRODUCTION, $logDir);

$monolog = new Logger('app');
$monolog->pushHandler(new RotatingFileHandler($logDir . '/app.log'));
$monolog->pushProcessor(new TracyExceptionProcessor($logDir, new BlueScreen()));

Debugger::setLogger(new TracyMonoLogger($monolog));
```

After this, every call Tracy makes to its `ILogger` (warnings, errors, uncaught exceptions, manual `Debugger::log()` calls) is routed through your Monolog stack.

### Priority mapping

[](#priority-mapping)

`TracyMonoLogger` maps Tracy priority strings to Monolog `Level` cases:

Tracy constantMonolog `Level``ILogger::DEBUG``Level::Debug``ILogger::INFO``Level::Info``ILogger::WARNING``Level::Warning``ILogger::ERROR``Level::Error``ILogger::EXCEPTION``Level::Critical``ILogger::CRITICAL``Level::Critical`Unknown priorities fall back to `Level::Error`.

### Throwable handling

[](#throwable-handling)

When `Debugger::log()` is called with a `Throwable`, the throwable is moved into the Monolog record context under the `exception` key. If you have pushed `TracyExceptionProcessor` onto your logger, that processor will:

1. Render the throwable to a Tracy BlueScreen HTML file in the configured log directory (file name `exception--Y-m-d--H-i--{hash}.html`), reusing an existing file if one for the same hash is already present.
2. Add `tracy_filename` (just the basename) and `tracy_created`(`true` if this call wrote the file, `false` if it pre-existed) to the record context.
3. Replace the record message with a human-readable summary of the throwable chain when the original message is empty.

### Nette DI

[](#nette-di)

Register the bundled compiler extension in your NEON config:

```
extensions:
    monolog: Detain\TracyHasMono\Bridges\NetteDI\MonologExtension
```

By default this registers:

- `monolog.handler` — `Monolog\Handler\RotatingFileHandler`pointing at `%logDir%/nette.log`
- `monolog.tracyExceptionProcessor` — `TracyExceptionProcessor`pointing at `%logDir%`
- `monolog.monologLogger` — `Monolog\Logger` channel `nette`with the handler and processor pre-pushed
- `monolog.tracyLogger` — `TracyMonoLogger` wrapping the above and replacing the autowired `tracy.logger` service

After compilation the extension also injects `\Tracy\Debugger::setLogger($this->getByType(\Tracy\ILogger::class))`into the container's `initialize()` method, so Tracy itself begins routing through Monolog as soon as the container boots.

To reuse an existing Monolog logger service instead of letting the extension create one, pass it via the extension config:

```
monolog:
    monolog: @myMonologLogger
```

Architecture
------------

[](#architecture)

```
src/
├── Bridges/NetteDI/MonologExtension.php   # Nette DI compiler extension
├── Logger.php                             # Legacy Nextras\TracyMonologAdapter alias
├── Processors/TracyExceptionProcessor.php # Monolog processor → BlueScreen HTML
└── TracyMonoLogger.php                    # Tracy ILogger → Monolog adapter

```

Two namespaces are exposed:

- `Detain\TracyHasMono\` — the active namespace; use this in new code.
- `Nextras\TracyMonologAdapter\` — covers `Logger.php` only, kept as a drop-in replacement for the original Nextras package.

License
-------

[](#license)

[New BSD License](license.md). See the license file for details.

Credits
-------

[](#credits)

Originally based on the [Nextras Tracy-Monolog Adapter](https://github.com/nextras/tracy-monolog-adapter)by the Nextras contributors, with portions (BlueScreen rendering, exception file naming, exception summary formatting) adapted from [Nette Tracy](https://github.com/nette/tracy) by David Grudl. Maintained for the Detain project by the Detain Project contributors.

###  Health Score

40

—

FairBetter than 88% of packages

Maintenance59

Moderate activity, may be stable

Popularity22

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity61

Established project with proven stability

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~522 days

Total

3

Last Release

2596d ago

Major Versions

v0.1.0 → v1.0.02016-05-25

v1.0.0 → v2.0.02019-04-04

PHP version history (2 changes)v0.1.0PHP &gt;=7.0

v2.0.0PHP &gt;=5.4

### Community

Maintainers

![](https://www.gravatar.com/avatar/b1036e0717211b8030b83cbe729e8ba6ba442fdbd5285fb97a39d7dcfe339342?d=identicon)[detain](/maintainers/detain)

---

Tags

adapterbridgecomposer-packagedebugdebug-barerror-handlingexceptionloggerloggingmonologmonolog-handlernettephpphp-libraryprofilingpsr-3psr-3-loggertracywhoopsnetteloggermonologdetain

### Embed Badge

![Health badge](/badges/detain-tracy-monolog-adapter/health.svg)

```
[![Health](https://phpackages.com/badges/detain-tracy-monolog-adapter/health.svg)](https://phpackages.com/packages/detain-tracy-monolog-adapter)
```

###  Alternatives

[theorchard/monolog-cascade

Monolog extension to configure multiple loggers in the blink of an eye and access them from anywhere

1482.2M9](/packages/theorchard-monolog-cascade)[inpsyde/wonolog

Monolog-based logging package for WordPress.

183617.9k7](/packages/inpsyde-wonolog)[kdyby/monolog

Integration of Monolog into Nette Framework

33684.0k10](/packages/kdyby-monolog)[logtail/monolog-logtail

Logtail handler for Monolog

233.2M3](/packages/logtail-monolog-logtail)[nextras/tracy-monolog-adapter

Nextras Tracy-Monolog Adapter

1128.1k](/packages/nextras-tracy-monolog-adapter)[bitrix-expert/monolog-adapter

Monolog adapter for Bitrix CMS

6566.3k](/packages/bitrix-expert-monolog-adapter)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
