生产环境日志必须按天切割,需正确配置daily驱动:修改default为daily、确保channels含daily完整配置、.env设log_channel=daily、显式指定path带.log后缀、设置days保留天数、保证storage/logs写权限,并清缓存验证。

生产环境日志必须按天切割,否则单个文件持续增长会拖慢写入、撑爆磁盘、排查困难;daily驱动虽默认启用,但仅改LOG_CHANNEL=daily远远不够,路径权限、保留策略、通道绑定任一环节出错都会导致日志仍写进一个大文件或静默丢失。
确认并启用daily驱动
打开config/logging.php,找到'default' => 'stack'这一行,把它改成'default' => 'daily'。
检查'channels'数组中是否存在名为'daily'的完整配置块;若不存在,需手动添加——stack通道本身不生成文件,它只是转发器,不能替代daily驱动。
在.env文件中确保LOG_CHANNEL=daily,且该行未被注释;如果同时存在LOG_CHANNEL=stack或LOG_CHANNEL=single,daily配置将完全不生效。
配置daily通道路径与轮转参数
在config/logging.php的'daily'通道定义中,必须显式指定'path'项,例如:'path' => storage_path('logs/laravel.log')。
【path值必须带.log后缀,且不能含日期变量】。写成storage_path('logs/laravel-'.date('Y-m-d').'.log')会导致每天只写一个固定文件,因为single驱动才解析PHP函数,daily驱动靠RotatingFileHandler内部逻辑拼接日期后缀。
设置'days' => 30,表示最多保留最近30天的日志文件(如今天是2026-08-27,系统会在写入新日志前自动删除2026-07-27及更早的文件);设为0则永不清理,需自行监控磁盘空间。
确保storage/logs/目录存在且Web服务器用户(如www-data、nginx或apache)有写权限:执行mkdir -p storage/logs && chmod -R 755 storage/logs;权限不足时,Laravel不会报错,日志直接静默失败。
验证日志是否真正按天切割
清空storage/logs/目录下所有日志文件。
执行php artisan config:clear,强制重载配置;缓存未清时,.env和config/logging.php的修改均无效。
触发一次日志写入:在浏览器访问任意路由,或在Tinker中运行Log::info('test daily rotation');。
立即检查storage/logs/目录,应出现形如laravel-2026-08-27.log的新文件;次日零点后首次写入日志,将自动生成laravel-2026-08-28.log,旧文件保持不动——这说明轮转机制已激活。











