生产环境必须关闭APP_DEBUG并设日志级别为info及以上,否则DEBUG日志导致I/O激增和响应延迟超100ms;需修改.env、config/logging.php,清缓存,并排查硬编码Log::debug()。

PHP框架在生产环境中频繁写入DEBUG日志,会导致磁盘I/O激增、文件锁竞争加剧,单次请求中数十条日志叠加后延迟可超100ms,直接拖慢用户响应。
确认当前日志级别配置
打开框架根目录下的.env文件,查找APP_DEBUG和LOG_LEVEL两行配置。若APP_DEBUG=true,必须先设为false——【APP_DEBUG=true时所有错误堆栈、SQL查询、变量dump都会强制输出,完全绕过日志级别控制】。
检查LOG_LEVEL值是否为debug或dev。生产环境只允许info、warning、error、critical四级之一。
修改Laravel日志级别
第一步:编辑config/logging.php文件,定位'default'键对应的默认通道名(通常是'stack');
立即学习“PHP免费学习笔记(深入)”;
第二步:找到该通道定义处(如'stack' => ['driver' => 'stack', ...]),在其'channels'子数组中,确认底层通道(如'single'或'storage')的level配置项;
第三步:将level值从'debug'改为'info',保存文件;
第四步:清空配置缓存,执行php artisan config:clear——【不执行此步,.env和config/logging.php的修改均不会生效】。
禁用Monolog中的DEBUG级处理器(适用于自定义日志通道)
方法一:在bootstrap/app.php中注册自定义日志服务时,显式排除DEBUG级别
使用Monolog\Handler\StreamHandler构造器时,第三个参数传入Monolog\Logger::INFO而非Monolog\Logger::DEBUG。
方法二:在logging.php中为特定通道添加level过滤器
在对应channel配置中加入'level' => 'info',同时确保'bubble'设为false,防止日志向上冒泡到更宽松的通道。
验证日志级别已生效
触发一次用户登录操作,然后执行tail -n 20 storage/logs/laravel.log;
观察最新日志条目中是否仍出现包含"DB query"、"View rendered"、"Cache hit"等典型DEBUG内容;
若仍有DEBUG条目,说明APP_DEBUG未关闭或某中间件/监听器手动调用了Log::debug()——需全局grep -r "Log::debug" app/排查硬编码。



















