跳转到主要内容

什么是日志

Laravel 日志系统以**通道(Channel)**为核心概念。 通道指的是一组定义了日志写入目标与方式的配置单元,可以组合文件、Slack、syslog 等各种输出目的地。 底层使用 Monolog 库,可以充分利用其丰富的 handler 与 formatter。
默认使用 stack 通道。stack 是把多个通道组合在一起的父通道。

配置

日志配置集中在 config/logging.php 中。可通过环境变量 LOG_CHANNEL 切换默认通道。

可用的通道驱动

日志级别

Laravel 支持 RFC 5424 定义的 8 个日志级别,按严重性从高到低排列: 通道的 level 设置表示最低日志级别。 例如 levelerror 时,只会记录 error 及以上(criticalalertemergency)。

基本用法

Log 门面

使用 Illuminate\Support\Facades\Log 门面按级别写入日志。
在控制器中的示例:

log() 辅助函数

使用 log() 辅助函数可以无需 import Log 门面直接写。

附加上下文信息

传入上下文(数组)可与消息一起记录相关信息。

withContext() — 为通道后续所有日志附加公共上下文

若希望对特定通道之后的所有日志附加公共信息,可使用 withContext()。 适合像请求 ID 这样希望出现在所有日志中的信息。

shareContext() — 对所有通道附加公共上下文

withContext() 只对目标通道生效,而 shareContext() 会作用于所有通道。

通道配置

stack 通道 — 同时写入多个通道

stack 通道让你一次调用同时写入多个通道。
以上配置将 debug 以上的日志写入 daily(文件),只有 critical 以上的日志才会发送到 slack
在生产环境,建议将 slack 通道级别设为 errorcritical。 若将琐碎日志推送到 Slack,会产生大量通知,重要告警反而容易被淹没。

daily 通道 — 日志轮转

daily 通道按日期分文件保存,并自动清理旧文件。
days 越小旧日志越快被删除。 为在生产环境排查故障,请保留足够的保留期。

向 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 扩展。

安装

基本用法

日志过滤

小结

  • 开发环境:使用 singledaily 写文件
  • 生产环境:使用 stack 组合 daily(文件保存)和 slack(错误通知)
  • 特定处理的日志:使用 Log::build() 创建按需通道写入独立文件
  • 实时监视:使用 php artisan pail 从终端查看
  • debug 日志中可能包含敏感信息,生产环境建议使用 LOG_LEVEL=error 或更高。
  • 日志文件请定期轮转,避免占满磁盘(使用 daily 通道的 days 设置)。
  • 向 Slack 等外部服务发送通知时注意速率限制,只推送严重错误。
最后修改于 2026年7月18日