Laravel 默认支持 Slack 日志通道,但需满足三个前提:LOG_CHANNEL=slack、配置有效SLACK_WEBHOOK_URL、日志级别不低于error;否则无消息发出。
直接说结论:Laravel 默认已支持 Slack 日志通道,但必须满足三个前提——LOG_CHANNEL=slack、配置了有效的 SLACK_WEBHOOK_URL、且日志级别不低于 error;否则发不出任何消息。
Slack 通道在 Laravel 中怎么启用
Laravel 的日志系统基于 Monolog,slack 是内置通道之一,无需额外安装包(Laravel 9+ 已内置 Monolog\Handler\SlackWebhookHandler)。启用只需两步:
- 在
.env中设置:LOG_CHANNEL=slack - 确保
SLACK_WEBHOOK_URL指向一个有效的 Slack Incoming Webhook URL(格式类似https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX) - 注意:Laravel 不会校验该 URL 是否真实有效,错误只会静默失败(可通过
php artisan tinker手动触发日志测试)
为什么写了 LOG_CHANNEL=slack 却没收到消息
最常见原因是日志级别被过滤掉了。Slack 通道默认只转发 error 及以上级别(error、critical、alert、emergency),warning 和 info 不会发送。
- 检查
config/logging.php中slack通道的level配置,默认是'level' => 'error' - 若想连
warning也推送,需显式修改为'level' => 'warning' - 运行
php artisan config:clear后再测试,否则.env或配置缓存可能掩盖问题 - 留意 Slack webhook 是否被组织策略屏蔽(尤其企业版 Slack),可先用
curl手动 POST 测试:
curl -X POST -H 'Content-type: application/json' --data '{"text":"test from curl"}' https://hooks.slack.com/services/...
如何让不同环境走不同通道(比如本地不发 Slack)
不要硬编码 LOG_CHANNEL,而是利用 Laravel 的环境驱动配置。在 config/logging.php 中定义多通道并按环境切换: