PHPackages                             systemsdk/easy-log-bundle - 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. systemsdk/easy-log-bundle

ActiveSymfony-bundle[Logging &amp; Monitoring](/categories/logging)

systemsdk/easy-log-bundle
=========================

A symfony bundle that optimizes dev log messages to be processed by humans instead of software.

v2.1.0(4mo ago)223.3k↓37.9%13MITPHPPHP &gt;=8.1CI passing

Since Dec 18Pushed 2mo ago2 watchersCompare

[ Source](https://github.com/systemsdk/easy-log-bundle)[ Packagist](https://packagist.org/packages/systemsdk/easy-log-bundle)[ Docs](https://github.com/systemsdk/easy-log-bundle)[ Fund](https://www.paypal.com/donate/?hosted_button_id=4ZZHRZHENRPZN)[ RSS](/packages/systemsdk-easy-log-bundle/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (7)Dependencies (3)Versions (8)Used By (3)

EasyLogBundle
=============

[](#easylogbundle)

Human-friendly log files for symfony framework. This is modified version of [EasyCorp/easy-log-handler](https://github.com/EasyCorp/easy-log-handler) due to EasyCorp/easy-log-handler is abandoned and no longer maintained.

[![MIT licensed](https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667)](LICENSE)[![Actions Status](https://github.com/systemsdk/easy-log-bundle/workflows/easy-log-bundle/badge.svg)](https://github.com/systemsdk/easy-log-bundle/actions)

[Source code](https://github.com/systemsdk/easy-log-bundle.git)

Description
-----------

[](#description)

Symfony log files are formatted in the same way for all environments. This means that `dev.log` is optimized for machines instead of humans. The result is a log file bloated with useless information that makes you less productive.

This bundle is a new Monolog handler that creates human-friendly log files. It's optimized to display the log information in a clear and concise way. Use it in the development environment to become a much more productive developer.

Requirements for EasyLogBundle version 2 or later
-------------------------------------------------

[](#requirements-for-easylogbundle-version-2-or-later)

- PHP 8.1 or later
- Symfony 6.1 or later
- Monolog bundle 3.0 or later

Requirements for EasyLogBundle version 1
----------------------------------------

[](#requirements-for-easylogbundle-version-1)

- PHP 7.4 or later
- Symfony 4.4 or later
- Monolog bundle 1.6 or later up to 2.X

Contents
--------

[](#contents)

1. [Features](#features)
2. [Installation](#installation)
3. [Configuration and Usage](#configuration-and-usage)

---

Features
--------

[](#features)

These are some of the best features of **EasyLogBundle** and how it compares itself with the default Symfony logs.

### Better Log Structure

[](#better-log-structure)

Symfony log files are a huge stream of text. When you open them, you can't easily tell when a request started or finished and which log messages belong together:

SymfonyEasyLogBundle[![structure-overview-symfony-mini](https://camo.githubusercontent.com/8dfccaded6fbe261740c6198d02e185d784e913dd28af9076c06265d463b675f/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79312e706e67)](https://camo.githubusercontent.com/8dfccaded6fbe261740c6198d02e185d784e913dd28af9076c06265d463b675f/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79312e706e67)[![structure-overview-easylog-mini](https://camo.githubusercontent.com/097942b49bf9e2c022de02f2d3cb1ca3633c4a8a8b31b4a7f808e59b8b995e21/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65312e706e67)](https://camo.githubusercontent.com/097942b49bf9e2c022de02f2d3cb1ca3633c4a8a8b31b4a7f808e59b8b995e21/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65312e706e67)EasyLogBundle structures the log files in a different way:

[![structure-easylog](https://camo.githubusercontent.com/b98977fb88ef33290d4c8a0923305f4db34105e570ea3846931b7f1be29f36e8/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65322e706e67)](https://camo.githubusercontent.com/b98977fb88ef33290d4c8a0923305f4db34105e570ea3846931b7f1be29f36e8/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65322e706e67)

- It adds a large header and some new lines to separate each request logs;
- If the request is less significant (e.g. Assetic requests) the header is more compact and displays less information;
- Log messages are divided internally, so you can better understand their different parts (request, doctrine, security, etc.)

### Less Verbose Logs

[](#less-verbose-logs)

First of all, EasyLogBundle doesn't display the timestamp in every log message. In the `dev` environment you shouldn't care about that, so the timestamp is only displayed once for each group of log messages.

SymfonyEasyLogBundle[![timestamps-symfony](https://camo.githubusercontent.com/33c0a0bd38192103787bfc3b59ebbe2339ac8a9a6922522284113c1bcd5a5ea0/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79322e706e67)](https://camo.githubusercontent.com/33c0a0bd38192103787bfc3b59ebbe2339ac8a9a6922522284113c1bcd5a5ea0/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79322e706e67)[![timestamps-easylog](https://camo.githubusercontent.com/c9667e38c55c3fce5576bafc9e691c6bbb055d3f7bcc2a200589858f5de60751/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65332e706e67)](https://camo.githubusercontent.com/c9667e38c55c3fce5576bafc9e691c6bbb055d3f7bcc2a200589858f5de60751/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65332e706e67)The `extra` information, which some log messages include to add more details about the log, is displayed only when it's different from the previous log. In contrast, Symfony always displays the `extra` for all logs, generating a lot of duplicated information:

Symfony[![extra-symfony](https://camo.githubusercontent.com/1bae6d10036515158fbd5c8ab4f5f6119938a3bba93b1a536cab198277b2e698/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79332e706e67)](https://camo.githubusercontent.com/1bae6d10036515158fbd5c8ab4f5f6119938a3bba93b1a536cab198277b2e698/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79332e706e67)EasyLogBundle[![extra-easylog](https://camo.githubusercontent.com/f247fbee08f39d94e6f2547705473bcf8345f570ab620498e2ac56eceff6e781/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65342e706e67)](https://camo.githubusercontent.com/f247fbee08f39d94e6f2547705473bcf8345f570ab620498e2ac56eceff6e781/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65342e706e67)It's becoming increasingly popular to use placeholders in log messages instead of the actual values (e.g. `Matched route "{route}".` instead of `Matched route "home".`) This is great for machines, because they can group similar messages that only vary in the placeholder values.

However, for humans this "feature" is disturbing. That's why EasyLogBundle automatically replaces any placeholder included in the log message:

Symfony[![placeholders-symfony](https://camo.githubusercontent.com/64420849064737a94c0c2b00cdd310e229a69f2c29f4af59e4223375f7f152d4/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79342e706e67)](https://camo.githubusercontent.com/64420849064737a94c0c2b00cdd310e229a69f2c29f4af59e4223375f7f152d4/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79342e706e67)EasyLogBundle[![placeholder-easylog](https://camo.githubusercontent.com/c26f3242d2764b922f67b89bb5e8adeeea35b8f7e8178c941aa0d65a43d7b367/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65352e706e67)](https://camo.githubusercontent.com/c26f3242d2764b922f67b89bb5e8adeeea35b8f7e8178c941aa0d65a43d7b367/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65352e706e67)### Better Visual Hierarchy

[](#better-visual-hierarchy)

Important elements, such as deprecations and security-related messages, must stand out in log files to help you spot them instantly. However, in Symfony all logs look exactly the same. How can you know which are the important ones?

Symfony[![visual-hierarchy-symfony](https://camo.githubusercontent.com/c646c6d732d3c880249c5827c1f7966737fccf2aedd8c2b8f1aecc4df69d01e1/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79352e706e67)](https://camo.githubusercontent.com/c646c6d732d3c880249c5827c1f7966737fccf2aedd8c2b8f1aecc4df69d01e1/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79352e706e67)
 (all messages look exactly the same)EasyLogBundle[![visual-hierarchy-easylog](https://camo.githubusercontent.com/5ab42ae8a25300a68f30a217da9019ce6269f01b01a3887d489db486f746e1a6/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65362e706e67)](https://camo.githubusercontent.com/5ab42ae8a25300a68f30a217da9019ce6269f01b01a3887d489db486f746e1a6/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65362e706e67)
 (deprecations, warnings, errors and security messages stand out)### Dynamic Variable Inlining

[](#dynamic-variable-inlining)

Log messages usually contain related variables in their `context` and `extra` properties. Displaying the content of these variables in the log files is always a tough balance between readability and conciseness.

EasyLogBundle decides how to inline these variables dynamically depending on each log message. For example, Doctrine query parameters are always inlined but request parameters are inlined for unimportant requests and nested for important requests:

[![dynamic-inline-easylog](https://camo.githubusercontent.com/5863ab22526dd4491ccef287ca41fc94bfe3084634f24e912e9d72a629a80228/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65372e706e67)](https://camo.githubusercontent.com/5863ab22526dd4491ccef287ca41fc94bfe3084634f24e912e9d72a629a80228/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65372e706e67)

### Stack Traces

[](#stack-traces)

When log messages include error stack traces, you definitely want to take a look at them. However, Symfony displays stack traces inlined, making them impossible to inspect. EasyLogBundle displays them as proper stack traces:

Symfony[![stack-trace-symfony](https://camo.githubusercontent.com/bf16a5b131db264974f2a7496964a681f4496e755b0e28a046929d3633798f43/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79362e706e67)](https://camo.githubusercontent.com/bf16a5b131db264974f2a7496964a681f4496e755b0e28a046929d3633798f43/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79362e706e67)EasyLogBundle[![stack-trace-easylog](https://camo.githubusercontent.com/6206f61adaa85b1df19ec687317c571ccc989cf4a8ac84be8301a24864ac3565/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65382e706e67)](https://camo.githubusercontent.com/6206f61adaa85b1df19ec687317c571ccc989cf4a8ac84be8301a24864ac3565/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65382e706e67)### Log Message Grouping

[](#log-message-grouping)

One of the most frustrating experiences when inspecting log files is having lots of repeated or similar consecutive messages. It leads to lack of information and it just distract you. EasyLogBundle process all log messages at once instead of one by one, so it's aware when there are similar consecutive logs.

For example, this is a Symfony log file displaying three consecutive missing translation messages:

[![translation-group-symfony](https://camo.githubusercontent.com/dcaee1cdad1cb23bc04a10a1a00aa6e7e607dc0ed7b000ebda7bd4c67f5d12dc/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79372e706e67)](https://camo.githubusercontent.com/dcaee1cdad1cb23bc04a10a1a00aa6e7e607dc0ed7b000ebda7bd4c67f5d12dc/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79372e706e67)

And this is how the same messages are displayed by EasyLogBundle:

[![translation-group-easylog](https://camo.githubusercontent.com/4ad0774dd6b5670d5efe51b266423339eaffa7ce7087d2422ee5decda3fbf7b9/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65392e706e67)](https://camo.githubusercontent.com/4ad0774dd6b5670d5efe51b266423339eaffa7ce7087d2422ee5decda3fbf7b9/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c65392e706e67)

The difference is even more evident for "event notified" messages, which usually generate tens of consecutive messages:

Symfony[![event-group-symfony](https://camo.githubusercontent.com/25ae15fc496b6f8dcf0e26a239c45d7feae8852f1b7464de61d9b9e15fc2099c/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79382e706e67)](https://camo.githubusercontent.com/25ae15fc496b6f8dcf0e26a239c45d7feae8852f1b7464de61d9b9e15fc2099c/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f73796d666f6e79382e706e67)EasyLogBundle[![event-group-easylog](https://camo.githubusercontent.com/1aa8ada21187e8c3c44200998c85e91ef82b68e637d9b367f82ad98482b63ff2/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c6531302e706e67)](https://camo.githubusercontent.com/1aa8ada21187e8c3c44200998c85e91ef82b68e637d9b367f82ad98482b63ff2/68747470733a2f2f73797374656d73646b2e636f6d2f7573657266696c65732f696d6167652f656173792d6c6f672d62756e646c652f656173792d6c6f672d62756e646c6531302e706e67)Most log handlers treat each log message separately. In contrast, EasyLogBundle advanced log processing requires each log message to be aware of the other logs (for example to merge similar consecutive messages). This means that all the logs associated with the request must be captured and processed in batch.

Installation
------------

[](#installation)

1. If you have installed `easycorp/easy-log-handler` just uninstall it:

```
$ composer remove easycorp/easy-log-handler
```

Note: Please remove configuration files `config/packages/easy_log_handler.yaml`, `config/packages/dev/easy_log_handler.yaml`, `config/packages/test/easy_log_handler.yaml`, etc...

2. Allow Flex to use contrib recipes and install the next symfony bundle:

```
$ composer config extra.symfony.allow-contrib true
$ composer require --dev systemsdk/easy-log-bundle:*
```

Configuration and Usage
-----------------------

[](#configuration-and-usage)

You can change the default configuration in your application by editing the next config file:

```
# config/packages/systemsdk_easy_log.yaml
when@dev:
    monolog:
        handlers:
            buffered:
                type: buffer
                handler: easylog
                level: debug
                channels: [ '!event' ]
            easylog:
                type: service
                id: easy_log.handler
    easy_log:
        log_path: '%kernel.logs_dir%/%kernel.environment%-readable.log'
        max_line_length: 120
        prefix_length: 4
        ignored_routes: [ '_wdt', '_profiler' ]

when@test:
    easy_log:
        log_path: '%kernel.logs_dir%/%kernel.environment%-readable.log'
        max_line_length: 120
        prefix_length: 4
        ignored_routes: [ '_wdt', '_profiler' ]
```

###  Health Score

52

—

FairBetter than 96% of packages

Maintenance82

Actively maintained with recent releases

Popularity30

Limited adoption so far

Community18

Small or concentrated contributor base

Maturity67

Established project with proven stability

 Bus Factor1

Top contributor holds 60% of commits — single point of failure

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 ~307 days

Recently: every ~347 days

Total

7

Last Release

134d ago

Major Versions

v1.10.2 → v2.0.02022-06-26

PHP version history (2 changes)v1.10.0PHP &gt;=7.4

v2.0.0PHP &gt;=8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/33e0fb1bc5cd58d4a1d671f46cd90d2d922ec5392f91b87ea346dcb82716b637?d=identicon)[dimadeush](/maintainers/dimadeush)

---

Top Contributors

[![dimadeush](https://avatars.githubusercontent.com/u/4595354?v=4)](https://github.com/dimadeush "dimadeush (3 commits)")[![ollietb](https://avatars.githubusercontent.com/u/342090?v=4)](https://github.com/ollietb "ollietb (1 commits)")[![tarlepp](https://avatars.githubusercontent.com/u/595561?v=4)](https://github.com/tarlepp "tarlepp (1 commits)")

---

Tags

logsymfonybundleloggingmonologproductivityeasy

### Embed Badge

![Health badge](/badges/systemsdk-easy-log-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/systemsdk-easy-log-bundle/health.svg)](https://phpackages.com/packages/systemsdk-easy-log-bundle)
```

###  Alternatives

[mero/telegram-handler

Monolog handler to send log by Telegram

36113.3k](/packages/mero-telegram-handler)[filips123/monolog-phpmailer

PHPMailer handler for Monolog

1365.6k3](/packages/filips123-monolog-phpmailer)

PHPackages © 2026

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