必须分离日志通道、限制轮转天数、关闭调试输出:配置独立payment通道,移除stack中的single驱动,将daily保留天数设为30,.env中设app_log_level=error并清缓存,修复storage/logs权限与初始化。

让Laravel生产环境日志可追溯、不撑爆磁盘、关键错误能被及时发现,必须分离通道、限制轮转天数、关闭调试输出——否则线上报错找不到源头,日志文件一天涨到2GB,支付失败信息混在几万行debug日志里根本捞不到。
配置独立的支付日志通道
第一步:打开config/logging.php,找到channels数组末尾位置。
第二步:插入以下配置块,注意缩进与逗号位置,漏掉逗号会导致PHP解析失败:
【'payment' => [ 'driver' => 'daily', 'path' => storage_path('logs/payment.log'), 'level' => 'info', 'days' => 14, ],】
这一步不能写在stack的channels数组里,必须作为顶层通道定义;否则Log::channel('payment')会fallback到default,且不报任何错误。
禁用single主日志并收紧stack聚合通道
打开config/logging.php,定位到channels['stack']配置块。
删掉'single'这一项——它会持续追加写入一个文件,生产环境跑一周就超1.8GB,且无法自动清理。
保留'daily'和'stderr',其中'daily'用于归档,'stderr'确保容器日志收集器(如Docker logs)能捕获紧急错误。
确认'default' => 'stack'未被注释,且.env中LOG_CHANNEL=stack与之严格一致,否则所有未指定channel的日志都会静默走fallback逻辑。
设置日志保留天数与最低记录级别
方法一:在channels['daily']配置中,将'days' => 7改为'days' => 30,避免默认7天太短导致审计断档。
方法二:在.env中设置APP_LOG_LEVEL=error,强制只记录error及以上级别——debug和info级日志在生产环境不仅无用,还会拖慢TPS,尤其当Eloquent查询绑定参数被完整打印时,密码可能明文出现在日志里。
注意:修改.env后必须执行php artisan config:clear,否则APP_LOG_LEVEL变量不会生效,因为缓存中的旧配置优先级更高。
修复storage/logs目录权限与初始化
执行mkdir -p storage/logs,确保父目录存在。
运行sudo chown -R www-data:www-data storage/logs(Debian/Ubuntu)或sudo chown -R apache:apache storage/logs(CentOS),Web服务器进程必须对目录有写权限,否则日志直接丢弃,连错误都不记。
执行sudo chmod -R 755 storage/logs,禁止其他用户写入,防止恶意覆盖日志文件。
手动创建初始文件:touch storage/logs/laravel.log && chmod 644 storage/logs/laravel.log,避免首次写入时因权限不足触发Monolog静默失败。











