averor/simple-logger
Simple, lightweight logger for PHP/Laravel apps. Provides an easy API to write log messages with minimal setup, useful for small projects, debugging, or when you want straightforward logging without extra configuration.
Installation
composer require averor/simple-logger
Add to config/app.php under providers (if not using auto-discovery):
Averor\SimpleLogger\SimpleLoggerServiceProvider::class,
Basic Usage
Register the logger in config/logging.php:
'channels' => [
'simple' => [
'driver' => 'custom',
'via' => Averor\SimpleLogger\SimpleLogger::class,
'level' => env('LOG_LEVEL', \Monolog\Logger::DEBUG),
],
],
Then bind it in AppServiceProvider@boot():
$this->app->bind(\Psr\Log\LoggerInterface::class, function ($app) {
return new Averor\SimpleLogger\SimpleLogger($app['config']['logging.simple.level']);
});
First Use Case
Inject \Psr\Log\LoggerInterface into a controller/service and log:
public function index(LoggerInterface $logger) {
$logger->debug('Debug message');
$logger->info('User action', ['user_id' => 1]);
}
PSR-3 Compliance
emergency(), alert(), critical(), ..., debug()).$logger->warning('Failed', ['error' => $e, 'trace' => $e->getTraceAsString()]);
Level-Based Filtering
LOG_LEVEL=debug).Output Handlers
stderr (useful for CLI/Docker).Averor\SimpleLogger\Handler\AbstractHandler to write to files, databases, etc.
$logger->setHandler(new CustomFileHandler('/path/to/logs'));
Contextual Logging
$logger->withContext(['request_id' => $request->header('X-Request-ID')]);
monolog/monolog for advanced features (handlers, formatters) while keeping simple-logger as the core:
$logger = new Averor\SimpleLogger\SimpleLogger();
$monolog = new \Monolog\Logger('name', [$logger]);
facade: SimpleLogger { return app(LoggerInterface::class); }
LoggerInterface in tests:
$mock = Mockery::mock(LoggerInterface::class);
$this->app->instance(LoggerInterface::class, $mock);
No Built-in Formatting
monolog/monolog) for JSON/structured logs.$logger->info(json_encode(['event' => 'user_login', 'data' => $user]));
Thread Safety
ignore_failure workers).Handler Limitations
StderrHandler) is synchronous. For async logging, implement a custom handler.Level Case Sensitivity
\Psr\Log\LogLevel constants exactly (e.g., DEBUG, not debug).php artisan config:clear if stale).Averor\SimpleLogger\Handler\HandlerInterface.withContext() before logging to preserve metadata:
$logger->withContext(['user_id' => auth()->id()])->info('Action performed');
Custom Handlers
AbstractHandler and override handle():
class SlackHandler extends AbstractHandler {
public function handle(array $record) {
$this->sendToSlack($record['message'], $record['context']);
}
}
Filtering
Averor\SimpleLogger\Filter\FilterInterface to block sensitive data:
$logger->addFilter(new SensitiveDataFilter(['password', 'token']));
Performance
class BatchFileHandler extends AbstractHandler {
private $buffer = [];
public function handle(array $record) {
$this->buffer[] = $record;
if (count($this->buffer) > 100) {
file_put_contents($this->path, implode("\n", $this->buffer));
$this->buffer = [];
}
}
}
Laravel-Specific
$this->app->extend(\Psr\Log\LoggerInterface::class, function ($app) {
$logger = new Averor\SimpleLogger\SimpleLogger();
$logger->pushHandler(new \Monolog\Handler\StreamHandler(storage_path('logs/simple.log')));
return $logger;
});
How can I help you explore Laravel packages today?