Laravel PHPUnit-Tests in andere Log-Datei loggen lassen

12.01.2018

Im Moment habe ich mehreren Projekte, die ich mit dem PHP-Framework Laravel umgesetze. Laravel bietet mir unter anderem hervorragende Grundlagen um APIs, mit einer ORM gemappten Datenbank und der dazugehörigen Geschäftslogik umzusetzen. PHPUnit-Tests sind bereits vorkonfiguriert, so dass man sofort loslegen kann seine APIs testgetrieben zu entwickeln.

Standardmäßig werden alle Logs die durch die Anwendung erzeugt werden in “laravel/storage/log/laravel.log” gespeichert.

\Log::info('IMPORT - START');

Nutze ich oben stehenden Code in einem Controller oder einem Laravel-Command wird immer in die Standard-Log-Datei geloggt, auch wenn ein PHPUnit-Test läuft.

Mit folgender Ergänzung in der Datei “laravel/test/TestCase.php” werden bei Tests die Log-Ausgaben aller Tests nach “laravel/storage/log/test.log” gespeichert.

//add this to createApplication(), directly before the return
\Log::getMonolog()->popHandler();//remove default Log-Handler
\Log::useFiles(storage_path().'/logs/test.log');//set new Log-Handler