PHP项目Laravel日志通道怎样配置

wen PHP项目 5

本文目录导读:

PHP项目Laravel日志通道怎样配置

  1. 基础配置
  2. 常用日志通道配置
  3. 高级配置示例
  4. 环境配置
  5. 使用日志
  6. 日志级别说明
  7. 生产环境最佳实践

在Laravel中配置日志通道非常灵活,可以通过配置文件轻松管理,以下是详细的配置方法:

基础配置

配置文件位置

主要配置文件位于 config/logging.php

默认配置示例

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['single'],
        'ignore_exceptions' => false,
    ],
    '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,
    ],
    'slack' => [
        'driver' => 'slack',
        'url' => env('LOG_SLACK_WEBHOOK_URL'),
        'username' => 'Laravel Log',
        'emoji' => ':boom:',
        'level' => env('LOG_LEVEL', 'critical'),
    ],
    'stderr' => [
        'driver' => 'monolog',
        'level' => env('LOG_LEVEL', 'debug'),
        'handler' => StreamHandler::class,
        'with' => [
            'stream' => 'php://stderr',
        ],
    ],
    'syslog' => [
        'driver' => 'syslog',
        'level' => env('LOG_LEVEL', 'debug'),
    ],
    'errorlog' => [
        'driver' => 'errorlog',
        'level' => env('LOG_LEVEL', 'debug'),
    ],
],

常用日志通道配置

单文件日志

'single' => [
    'driver' => 'single',
    'path' => storage_path('logs/laravel.log'),
    'level' => 'debug',
],

每日日志(推荐)

'daily' => [
    'driver' => 'daily',
    'path' => storage_path('logs/laravel.log'),
    'level' => 'debug',
    'days' => 14, // 保留14天
],

多通道堆栈

'stack' => [
    'driver' => 'stack',
    'channels' => ['daily', 'slack'],
    'ignore_exceptions' => false,
],

高级配置示例

按模块分离日志

'channels' => [
    'orders' => [
        'driver' => 'daily',
        'path' => storage_path('logs/orders.log'),
        'level' => 'info',
        'days' => 30,
    ],
    'payments' => [
        'driver' => 'daily',
        'path' => storage_path('logs/payments.log'),
        'level' => 'info',
        'days' => 30,
    ],
],

使用自定义处理器

'custom' => [
    'driver' => 'monolog',
    'level' => 'debug',
    'handler' => \Monolog\Handler\RotatingFileHandler::class,
    'handler_with' => [
        'filename' => storage_path('logs/custom.log'),
        'maxFiles' => 30,
    ],
],

数据库日志

'database' => [
    'driver' => 'custom',
    'via' => \App\Logging\DatabaseLogger::class,
],
// app/Logging/DatabaseLogger.php
namespace App\Logging;
use Monolog\Logger;
class DatabaseLogger
{
    public function __invoke(array $config)
    {
        return new Logger('database', [
            new \Monolog\Handler\DBHandler(),
        ]);
    }
}

环境配置

.env 文件中设置:

# 设置默认日志通道
LOG_CHANNEL=daily
# 设置日志级别
LOG_LEVEL=debug
# Slack Webhook (如果使用)
LOG_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxx

使用日志

use Illuminate\Support\Facades\Log;
// 基础用法
Log::info('用户登录成功');
Log::warning('异常请求');
Log::error('支付失败', ['order_id' => 123]);
// 使用特定通道
Log::channel('orders')->info('新订单创建', ['order_id' => 123]);
Log::stack(['orders', 'daily'])->info('订单记录', ['data' => $data]);
// 使用辅助函数
logger('测试日志');

日志级别说明

  • emergency: 系统不可用
  • alert: 必须立即采取行动
  • critical: 紧急情况
  • error: 运行时错误
  • warning: 警告但不致命
  • notice: 正常但重要的事件
  • info: 常规日志
  • debug: 调试信息

生产环境最佳实践

// config/logging.php
'channels' => [
    'production' => [
        'driver' => 'daily',
        'path' => storage_path('logs/laravel.log'),
        'level' => 'warning', // 生产环境只记录警告以上
        'days' => 30,
        'tap' => [\App\Logging\CustomizeFormatter::class],
    ],
    'audit' => [
        'driver' => 'daily',
        'path' => storage_path('logs/audit.log'),
        'level' => 'info',
        'days' => 90,
        'formatter' => \Monolog\Formatter\JsonFormatter::class,
    ],
],

通过合理配置日志通道,可以更好地管理和追踪应用运行状态,建议在开发环境使用debug级别,生产环境使用warningerror级别的日志记录。

抱歉,评论功能暂时关闭!