You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制Laravel日志文件大小 避免占满服务器存储空间

Laravel 5.8 日志容量控制方案(无需额外定时任务)

Laravel 5.8 日志底层基于Monolog实现,你可以直接通过修改日志配置实现日志按大小拆分、总容量限制,不需要额外编写cron任务,具体方案如下:

方案1:按大小自动拆分+固定保留份数(最常用)

通过配置自定义日志Channel,调用Monolog原生的RotatingFileHandler,可同时实现按大小拆分日志和自动清理过期日志,总占用空间可精准控制为「单文件上限 * 保留份数」,完全避免日志无限制增长。
操作步骤:

  1. 打开config/logging.php,在channels数组中新增如下自定义Channel配置:
'size_rotate' => [
    'driver' => 'monolog',
    'handler' => \Monolog\Handler\RotatingFileHandler::class,
    'handler_with' => [
        'filename' => storage_path('logs/laravel.log'),
        'maxFiles' => 30, // 最多保留30份日志,超出后自动删除最旧的文件
        'maxFileSize' => 100 * 1024 * 1024, // 单文件最大100MB,超出后自动拆分新文件
        'level' => \Monolog\Logger::WARNING, // 可按需调整最低记录级别,生产环境建议设为WARNING以上减少日志量
    ],
],
  1. 修改项目根目录.env文件中的日志驱动配置:
LOG_CHANNEL=size_rotate
  1. 重启队列、fpm等服务后生效。

方案2:新增日志去重逻辑(针对突发重复报错场景)

如果你的日志暴增多是因为同一报错短时间内重复打印,可以叠加Monolog的DeduplicationHandler,将指定时间窗口内完全相同的日志仅保留1份,可直接将突发日志量降低90%以上。
配置示例:

'deduplicated_size_rotate' => [
    'driver' => 'monolog',
    'handler' => \Monolog\Handler\DeduplicationHandler::class,
    'handler_with' => [
        'handler' => new \Monolog\Handler\RotatingFileHandler(
            storage_path('logs/laravel.log'),
            30,
            \Monolog\Logger::WARNING,
            true,
            0664,
            100 * 1024 * 1024
        ),
        'time' => 60, // 60秒内相同日志仅存储1次
        'level' => \Monolog\Logger::WARNING,
    ],
],

修改.env的LOG_CHANNEL为deduplicated_size_rotate即可生效。

额外优化建议

  • 生产环境关闭debug模式,避免不必要的调试日志写入
  • 接口请求、SQL查询这类高频日志,可按需单独配置独立的Channel和保留策略,避免和核心报错日志混写占用空间

内容的提问来源于stack exchange,提问作者Tal C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 08:45:00