在 Laravel 中,日志记录是一个非常重要的功能,它可以帮助你跟踪应用程序的运行状态、调试问题以及监控系统活动。以下是一份详细的 Laravel 日志记录教程:
Laravel 支持多种日志驱动,如单文件、每日文件、syslog、errorlog 等。你可以在
config/logging.php
文件中进行配置。
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 14, // 保留 14 天的日志文件
],
'stack' => [
'driver' => 'stack',
'channels' => ['single', 'slack'], // 同时使用单文件和 Slack 驱动
'ignore_exceptions' => false,
],
在 .env
文件中,你可以修改 LOG_CHANNEL
变量来指定默认的日志驱动。例如,使用每日文件驱动:
Laravel 提供了多种方式来记录日志信息。
Log
门面是 Laravel 提供的一个方便的日志记录工具。你可以在控制器、模型或其他类中使用它。
use Illuminate\Support\Facades\Log;
// 记录不同级别的日志信息
Log::emergency('系统发生紧急情况!');
Log::alert('需要立即采取行动的问题!');
Log::critical('关键问题,系统可能无法正常运行!');
Log::error('发生错误!');
Log::warning('可能存在问题!');
Log::notice('正常但值得注意的事件!');
Log::info('一般信息!');
Log::debug('调试信息!');
// 记录带上下文信息的日志
$user = ['id' => 1, 'name' => 'John Doe'];
Log::info('用户登录', $user);
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class UserController extends Controller
{
public function index()
{
Log::info('用户访问了用户列表页面');
return view('users.index');
}
}
Laravel 支持多种日志级别,从最严重到最不严重依次为:
emergency
:系统无法使用。
alert
:需要立即采取行动。
critical
:关键问题,系统可能无法正常运行。
error
:发生错误。
warning
:可能存在问题。
notice
:正常但值得注意的事件。
info
:一般信息。
debug
:调试信息。
你可以在 config/logging.php
文件中设置日志记录的最低级别。例如,只记录 error
及以上级别的日志:
除了默认的日志通道,你还可以创建自定义的日志通道。
首先,在 config/logging.php
文件中添加一个新的通道:
'database' => [
'driver' => 'custom',
'via' => \App\Logging\CreateDatabaseLogger::class,
],
然后,创建一个自定义的日志处理器类 CreateDatabaseLogger
:
<?php
namespace App\Logging;
use Illuminate\Support\Facades\DB;
use Monolog\Logger;
use Monolog\Handler\AbstractProcessingHandler;
class CreateDatabaseLogger
{
public function __invoke(array $config)
{
$logger = new Logger('database');
$logger->pushHandler(new DatabaseHandler());
return $logger;
}
}
class DatabaseHandler extends AbstractProcessingHandler
{
protected function write(array $record): void
{
DB::table('logs')->insert([
'level' => $record['level_name'],
'message' => $record['message'],
'context' => json_encode($record['context']),
'created_at' => now(),
]);
}
}
最后,使用自定义的日志通道:
use Illuminate\Support\Facades\Log;
Log::channel('database')->info('这是一条数据库日志记录');
如果你使用的是每日文件驱动,Laravel 会自动管理日志文件的保留时间。你可以在 config/logging.php
文件中调整 days
参数来设置保留的天数。
如果你想手动清理日志文件,可以使用以下命令:
php artisan cache:clear
php artisan view:clear
php artisan config:clear
php artisan route:clear
rm -rf storage/logs/*.log
以上就是 Laravel 日志记录的基本教程,通过合理配置和使用日志功能,你可以更好地监控和调试你的应用程序。