在 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 日志记录的基本教程,通过合理配置和使用日志功能,你可以更好地监控和调试你的应用程序。