innmind / log-reader
Parse log files
5.4.0
2025-07-31 15:22 UTC
Requires
- php: ~8.2
- innmind/foundation: ~1.3
- psr/log: ^3.0
Requires (Dev)
- innmind/black-box: ^6.4.1
- innmind/coding-standard: ~2.0
- innmind/static-analysis: ^1.2.1
This package is auto-updated.
Last update: 2025-07-31 15:22:56 UTC
README
Allow you to parse symfony and apache access logs.
BEWARE, it can take a lot of time depending on the amount of data (For a typical symfony dev.log
it starts to really slow down after 10k lines)
Installation
composer require innmind/log-reader
Usage
use Innmind\LogReader\{ Reader, LineParser\Monolog, Log, }; use Innmind\OperatingSystem\Factory; use Innmind\Filesystem\Name; use Innmind\Url\Path; use Psr\Log\LogLevel; $os = Factory::build(); $read = Reader::of( Monolog::of($os->clock()), ); $os ->filesystem() ->mount(Path::of('var/logs/')) ->get(Name::of('prod.log')) ->map(static fn($file) => $file->content()) ->map($read) ->map( static fn($logs) => $logs ->filter( static fn($log) => $log ->attribute('level') ->filter(static fn($level) => $level->value() === LogLevel::CRITICAL) ->match( static fn() => true, static fn() => false, ), ) ->foreach( static fn($log) => $log ->attribute('message') ->match( static fn($attribute) => print($attribute->value()), static fn() => print('No message found'), ), ), static fn() => print('File does not exist'), );
The above example will print all messages that were logged at a critical level.
Note
If parsing the context
or extra
attributes of a monolog line fail they won't be exposed as attributes in the Log
object. This behaviour is implemented to not make the whole parsing fail due to this error.
Note
If a line can't be parsed for some reason it will simply be ignored and not exposed. Again this behaviour is implemented to not make the whole parsing fail.