什么是日志
Laravel 日志系统以**通道(Channel)**为核心概念。 通道指的是一组定义了日志写入目标与方式的配置单元,可以组合文件、Slack、syslog 等各种输出目的地。 底层使用 Monolog 库,可以充分利用其丰富的 handler 与 formatter。默认使用
stack 通道。stack 是把多个通道组合在一起的父通道。配置
日志配置集中在config/logging.php 中。可通过环境变量 LOG_CHANNEL 切换默认通道。
可用的通道驱动
日志级别
Laravel 支持 RFC 5424 定义的 8 个日志级别,按严重性从高到低排列:
通道的
level 设置表示最低日志级别。
例如 level 为 error 时,只会记录 error 及以上(critical、alert、emergency)。
基本用法
Log 门面
使用Illuminate\Support\Facades\Log 门面按级别写入日志。
log() 辅助函数
使用log() 辅助函数可以无需 import Log 门面直接写。
附加上下文信息
传入上下文(数组)可与消息一起记录相关信息。withContext() — 为通道后续所有日志附加公共上下文
若希望对特定通道之后的所有日志附加公共信息,可使用withContext()。
适合像请求 ID 这样希望出现在所有日志中的信息。
shareContext() — 对所有通道附加公共上下文
withContext() 只对目标通道生效,而 shareContext() 会作用于所有通道。
通道配置
stack 通道 — 同时写入多个通道
stack 通道让你一次调用同时写入多个通道。
debug 以上的日志写入 daily(文件),只有 critical 以上的日志才会发送到 slack。
daily 通道 — 日志轮转
daily 通道按日期分文件保存,并自动清理旧文件。
向 Slack 发送错误通知
获取 Slack 的 Incoming Webhook URL 并配置到.env 中。
stack 通道中加入 slack 并设置 LOG_CHANNEL=stack,发生错误时会自动通知。
写入特定通道
通过Log::channel() 显式指定目标通道。
按需通道
使用Log::build() 可以在不修改配置文件的情况下即时构建自定义通道。
适合测试或临时的输出目的。
实用场景
通过中间件附加请求 ID
给所有日志附加同一个请求 ID,能大幅提升按请求追踪日志的能力。1
创建中间件
2
实现 handle() 方法
3
注册中间件
在
bootstrap/app.php 中作为全局中间件注册。request-id。
记录弃用警告
可以将 PHP 或 Laravel 弃用功能的调用记录到日志中。.env 中指定通道:
Laravel Pail — 实时日志监视
Laravel Pail 是可以在终端实时查看应用日志的开发工具。运行 Pail 需要 PHP 的 PCNTL 扩展。
安装
基本用法
日志过滤
小结
如何选择日志级别
如何选择日志级别
通道选择指南
通道选择指南
- 开发环境:使用
single或daily写文件 - 生产环境:使用
stack组合daily(文件保存)和slack(错误通知) - 特定处理的日志:使用
Log::build()创建按需通道写入独立文件 - 实时监视:使用
php artisan pail从终端查看
生产环境注意事项
生产环境注意事项
debug日志中可能包含敏感信息,生产环境建议使用LOG_LEVEL=error或更高。- 日志文件请定期轮转,避免占满磁盘(使用
daily通道的days设置)。 - 向 Slack 等外部服务发送通知时注意速率限制,只推送严重错误。