Laravel logs to database table via custom Monolog channel + Eloquent model.
- Run
composer require adamcrampton/laravel-database-loggerin your project directory - Add library service provider
AdamCrampton\LaravelDatabaseLogger\LogServiceProvider::classtoconfig\app.php - Run
php artisan migrateto set up thelogstable - In
config\logging.php, add a new channel for the custom logs:
'database' => [
'driver' => 'custom',
'via' => \AdamCrampton\LaravelDatabaseLogger\Services\LogMonoLog::class
]
]
- Update the log stack array in
config\logging.phpto include the new channel:
'stack' => [
'driver' => 'stack',
'channels' => ['daily', 'database'],
],
'database' => [
'driver' => 'custom',
'via' => \AdamCrampton\LaravelDatabaseLogger\Services\LogMonoLog::class
],
A scheduled task is bundled with the package, which will delete rows in the logs table older than the expiration setting. To use this:
- Run
php artisan vendor:publishto publish thedatabase_logger.phpconfig file to your project - Run
php artisan config:cacheto ensure the project config is up to date - Set the expiration length (in days) in your project's
config/database_logger.phpfile - Add an entry to the
app/Console/Commands/Kernel.phpfile to schedule the cron job, something like:$schedule->command('logs:prune')->dailyAt('07:45');
To run the command manually: php artisan logs:prune
The package is pretty much a custom channel for Monolog, so you can use the existing facade and methods.
These columns are automatically populated when adding to the log:
descriptionThe log messageoriginThe origin value from the request headertypeLog type (log,store,change, ordelete)resultLog result (success,neutral, orfailure)levelLog message level (emergency,alert,critical,error,warning,notice,info, ordebug)
Additionally, you can pass in a category and sub_category value, which will be saved to those columns when generating a log entry. Example:
Log::info('test', ['category' => 'This is a category', 'sub_category' => 'This is a subcategory]);