vstelmakh/psr-test-logger

Easy to use PSR-3 compliant test-logger

v1.0.1 2025-03-15 17:11 UTC

This package is auto-updated.

Last update: 2025-05-16 23:03:34 UTC


README

PSR Test Logger logo

build Packagist version

PSR Test Logger

PSR Test Logger is a simple and easy-to-use PSR-3 compliant logger designed specifically for testing. It provides seamless integration with PHPUnit, making logging assertions effortless. With PSR Test Logger, you can efficiently verify log messages and context, ensuring your application logs expected events without unnecessary complexity.

Key features:

  • Fluent Interface - Provides clean test assertions with intuitive IDE autocompletion.
  • Predefined Assertions - A rich set of built-in assertions to validate log messages and contexts.
  • Automatic PHPUnit Integration - Works seamlessly within PHPUnit test cases, with zero configuration.
  • Extensible - Easily customizable to fit your testing needs.

If you wonder why not to just mock the logger interface in your tests. The main 🏆 advantage of PSR Test Logger in comparison to mocking logger - is simplicity of development and maintenance. For more details and examples see the Advantages of PSR Test Logger over Mock.

Requirements

Requirement Version
PHP >= 8.1
psr/log >= 2.0

Note

PHPUnit is not required to use PSR Test Logger. It can be used completely standalone.

Installation

Install the latest version with Composer:

composer require --dev vstelmakh/psr-test-logger

Remember to require as dev dependency. Most likely, you don't need this in production.

Usage Example

<?php

use VStelmakh\PsrTestLogger\TestLogger;
use PHPUnit\Framework\TestCase;

class YourServiceTest extends TestCase
{
    public function testSomething(): void
    {
        $logger = new TestLogger();

        $service = new YourService($logger);
        $service->doSomething();

        // Thanks to automatic PHPUnit integration,
        // corresponding assertations can be performed as simple as:

        $logger
            ->assert()
            ->hasLog()
            ->withMessage('Execution complete.');

        $logger
            ->assert()
            ->hasWarning()
            ->withMessageContains('not found')
            ->withContextContainsSameAs('id', 1);
    }
}

Tip

For all the available methods see Method Reference or check the source code, like TestLogger and Matcher, it's well documented and easy to follow. Or simply use ⚡ autocompletion of your IDE!

Contributing and Support

If you find this useful, don't hesitate to ⭐ give it a star!
Contributions are welcome. Please check out the CONTRIBUTING for guidelines.

Credits

Volodymyr Stelmakh
Licensed under the MIT License. See LICENSE for more information.