Log Fake is a drop-in fake logger for testing with the Laravel framework by Tim MacDonald (@timacdonald). The Log fake package gives you the ability to fake the logger in your application, including the ability to make assertions against channels and stacks introduced in Laravel 5.6.
Here’s a simple example of using the logger in a test:
<?php
use TiMacDonald\Log\LogFake;
use Illuminate\Support\Facades\Log;
//...
Log::swap(new LogFake);
Log::info('Donuts have arrived');
Log::assertLogged('info', function ($message, $context) {
return str_contains($message, 'Donuts');
});
As mentioned, this fake supports channels and stacks, so if you are logging to a specific channel in your app, you need to prefix your assertions with a given channel:
<?php
Log::channel('slack')->alert('It is 5pm, go home');
Log::channel('slack')->assertLogged('alert'); // passes
// without the channel prefix...
Log::assertLogged('alert'); // fails
Like channels, you will need to do the same thing for stacks:
<?php
Log::swap(new LogFake);
Log::stack(['bugsnag', 'sentry'])->critical('Perform evasive maneuvers');
Log::stack(['bugsnag', 'sentry'])->assertLogged('critical'); // passes
// without the stack prefix...
Log::assertLogged('critical'); // fails
The GitHub repo has a full list of available assertions and usage instructions, along with the source code.
Nice work Tim!