Giao diện
Logging
Giới thiệu (Introduction)
Laravel logging dựa trên "channels" (kênh). Mỗi channel đại diện cho một cách ghi log cụ thể. Ví dụ: channel single ghi vào một file, slack gửi log messages đến Slack. Laravel sử dụng thư viện Monolog bên dưới.
Cấu hình (Configuration)
File cấu hình tại config/logging.php. Mặc định, Laravel dùng channel stack — kết hợp nhiều channels.
Channel Drivers có sẵn
| Driver | Mô tả |
|---|---|
custom | Driver gọi factory tùy chỉnh |
daily | Driver Monolog RotatingFileHandler (xoay file hàng ngày) |
errorlog | Driver Monolog ErrorLogHandler |
monolog | Driver Monolog factory, dùng bất kỳ handler nào |
papertrail | Driver Monolog SyslogUdpHandler |
single | Channel đơn file/path-based (StreamHandler) |
slack | Driver Monolog SlackWebhookHandler |
stack | Wrapper tạo channels "multi-channel" |
syslog | Driver Monolog SyslogHandler |
Channel Prerequisites
Cấu hình Slack Channel
Cần URL url trong config/logging.php:
php
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => 'critical',
],Logging Deprecation Warnings
PHP, Laravel và thư viện thường thông báo features sẽ bị xóa. Log deprecation warnings:
php
// Trong config/logging.php
'deprecations' => [
'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
'trace' => env('LOG_DEPRECATIONS_TRACE', false),
],Building Log Stacks
Channel stack kết hợp nhiều channels:
php
'stack' => [
'driver' => 'stack',
'channels' => ['syslog', 'slack'],
'ignore_exceptions' => false,
],Log Level
Thuộc tính level xác định mức tối thiểu cần log. Monolog levels (tăng dần severity): debug, info, notice, warning, error, critical, alert, emergency.
Viết Log Messages (Writing Log Messages)
Dùng Log facade:
php
use Illuminate\Support\Facades\Log;
Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);Thông tin ngữ cảnh (Contextual Information)
Truyền array context data:
php
use Illuminate\Support\Facades\Log;
Log::info('User {id} đã đăng nhập.', ['id' => $user->id]);Ghi vào Channel cụ thể
php
use Illuminate\Support\Facades\Log;
Log::channel('slack')->info('Có gì đó xảy ra!');
// Stack on-the-fly
Log::stack(['single', 'slack'])->info('Có gì đó xảy ra!');On-Demand Channels
Tạo channel tại runtime:
php
use Illuminate\Support\Facades\Log;
Log::build([
'driver' => 'single',
'path' => storage_path('logs/custom.log'),
])->info('Có gì đó xảy ra!');Tùy chỉnh Monolog (Monolog Channel Customization)
Tùy chỉnh cho Channels
Dùng tap trong config để tùy chỉnh Monolog instance:
php
'single' => [
'driver' => 'single',
'tap' => [App\Logging\CustomizeFormatter::class],
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],php
<?php
namespace App\Logging;
use Illuminate\Log\Logger;
use Monolog\Formatter\LineFormatter;
class CustomizeFormatter
{
public function __invoke(Logger $logger): void
{
foreach ($logger->getHandlers() as $handler) {
$handler->setFormatter(new LineFormatter(
'[%datetime%] %channel%.%level_name%: %message% %context%'
));
}
}
}Tạo Handler Channels
php
'logentries' => [
'driver' => 'monolog',
'handler' => Monolog\Handler\SyslogUdpHandler::class,
'with' => [
'host' => 'my.logentries.internal.datahubhost.company.com',
'port' => '10000',
],
],Tạo Custom Channels qua Factories
php
'custom' => [
'driver' => 'custom',
'via' => App\Logging\CreateCustomLogger::class,
],php
<?php
namespace App\Logging;
use Monolog\Logger;
class CreateCustomLogger
{
public function __invoke(array $config): Logger
{
return new Logger(/* ... */);
}
}Theo dõi Log với Pail
Laravel Pail — package xem log trực tiếp từ terminal.
Cài đặt
bash
composer require laravel/pailSử dụng
bash
php artisan pailLọc Logs
bash
php artisan pail --filter="QueryException"
php artisan pail --message="User"
php artisan pail --level=error
php artisan pail --user=1