首页 > PHP > laravel教程 日志记录

laravel教程 日志记录

2025-02-22 16:38:13
在 Laravel 中,日志记录是一个非常重要的功能,它可以帮助你跟踪应用程序的运行状态、调试问题以及监控系统活动。以下是一份详细的 Laravel 日志记录教程:

1. 配置日志驱动


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 驱动:可以组合多个日志驱动。
'stack' => [
    'driver' => 'stack',
    'channels' => ['single', 'slack'], // 同时使用单文件和 Slack 驱动
    'ignore_exceptions' => false,
],

修改默认日志驱动


在 .env 文件中,你可以修改 LOG_CHANNEL 变量来指定默认的日志驱动。例如,使用每日文件驱动:
LOG_CHANNEL=daily

2. 记录日志信息


Laravel 提供了多种方式来记录日志信息。

使用 Log 门面


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');
    }
}

3. 日志级别


Laravel 支持多种日志级别,从最严重到最不严重依次为:

  • emergency:系统无法使用。
  • alert:需要立即采取行动。
  • critical:关键问题,系统可能无法正常运行。
  • error:发生错误。
  • warning:可能存在问题。
  • notice:正常但值得注意的事件。
  • info:一般信息。
  • debug:调试信息。

你可以在 config/logging.php 文件中设置日志记录的最低级别。例如,只记录 error 及以上级别的日志:
'level' => 'error',

4. 自定义日志通道


除了默认的日志通道,你还可以创建自定义的日志通道。

示例:创建一个自定义的数据库日志通道


首先,在 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('这是一条数据库日志记录');

5. 日志文件管理


如果你使用的是每日文件驱动,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 日志记录的基本教程,通过合理配置和使用日志功能,你可以更好地监控和调试你的应用程序。
 
使用 Ctrl+D 可将网站添加到书签
收藏网站
扫描二维码
关注早实习微信公众号
官方公众号
Top