Linux服务器上Laravel日志管理策略
导读:Linux服务器上 Laravel 日志管理策略 一 基础配置与日志级别 日志默认位于项目的storage/logs目录,常见文件为laravel.log。Laravel 基于 Monolog,在 config/logging.php 定...
Linux服务器上 Laravel 日志管理策略
一 基础配置与日志级别
- 日志默认位于项目的storage/logs目录,常见文件为laravel.log。Laravel 基于 Monolog,在 config/logging.php 定义通道(channel),默认使用 stack 聚合多个驱动;常见驱动包含:single(单文件)、daily(按天分割)、syslog(对接系统日志)、slack(即时告警)。开发环境可用 single,生产环境推荐 daily 或 stack + daily 组合。日志级别从低到高为:debug、info、notice、warning、error、critical、alert、emergency。在 .env 中设置 LOG_LEVEL=error 可只记录错误及以上级别;也可在 config/logging.php 的通道上设置 level 精细控制。代码示例:
- 使用 Log 门面记录日志:
use Illuminate\Support\Facades\Log; Log::info('用户登录', ['user_id' => 1]); Log::error('订单处理失败', ['order_id' => 1001, 'exception' => $e]); - 生产建议的 stack 组合(文件落盘 + 关键错误告警):
// config/logging.php 'default' => 'stack', 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['daily', 'slack'], 'ignore_exceptions' => false, ], 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'error'), 'days' => env('LOG_DAILY_DAYS', 14), ], 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), 'level' => 'critical', // 仅关键错误告警 'style' => 'minimal', ], ];
- 使用 Log 门面记录日志:
二 日志轮转与清理
- 方式一 Laravel 内置按天轮转
- 使用 daily 驱动并设置 days(保留天数)即可自动按天生成与清理日志文件,例如保留14天。此方式简单、与框架集成度高,适合大多数应用。
- 方式二 系统级 logrotate 轮转
- 为 Laravel 日志单独配置 /etc/logrotate.d/laravel,示例:
/path/to/your/laravel/storage/logs/*.log { daily missingok rotate 14 compress notifempty create 640 www-data www-data sharedscripts postrotate # 通知 PHP-FPM 重新打开日志文件(按需启用) # systemctl reload php-fpm || kill -USR1 `cat /run/php/php-fpm.pid 2> /dev/null` 2> /dev/null || true endscript } - 关键点:
- 轮转周期与保留天数可按需调整(如 daily/7 或 weekly/4)。
- create 640 www-data www-data 中的用户组需与 PHP-FPM/Nginx 运行用户一致,避免写入失败。
- 如使用文件句柄保持(如单进程常驻写入),可在 postrotate 中发送信号触发重新打开日志(如 PHP-FPM 的 USR1)。
- 为 Laravel 日志单独配置 /etc/logrotate.d/laravel,示例:
- 方式三 兜底清理
- 作为额外防线,可用 cron 定期清理超期日志(避免与 logrotate 重复删除):
# 每天 01:00 删除 14 天前的 .log 文件 0 1 * * * find /path/to/your/laravel/storage/logs -type f -name "*.log" -mtime +14 -delete
- 作为额外防线,可用 cron 定期清理超期日志(避免与 logrotate 重复删除):
三 集中化与告警
- 对接系统日志:使用 syslog 驱动将日志发送到 rsyslog/syslog-ng,便于与 ELK/Graylog/Splunk 等集中式日志平台对接,统一采集、检索与可视化。
- 即时告警:通过 slack 或 Papertrail/Loggly 等通道,将 error/critical 级别日志实时推送至团队渠道,缩短故障响应时间。
- 建议做法:生产环境采用 stack = daily + syslog/slack 的组合,既保留本地文件用于取证,又将关键告警与全量日志送往集中平台。
四 目录权限与运行用户
- 确保日志目录可写,运行用户与目录属主保持一致(示例为 www-data,请按实际环境替换为 nginx/apache 用户):
sudo mkdir -p /var/www/your_project/storage/logs sudo chown -R www-data:www-data /var/www/your_project/storage/logs sudo chmod -R 755 /var/www/your_project/storage/logs - 若使用 logrotate 的 create 指令,请保持与运行用户一致,避免轮转后新文件不可写。
五 日常运维与排错命令
- 实时查看最新日志:
tail -f /path/to/your/laravel/storage/logs/laravel.log - 检索错误关键字并高亮:
tail -n 200 storage/logs/laravel.log | grep -i -E 'error|exception|failed' --color=auto - 按时间范围查看(配合 GNU date):
# 查看昨天的日志 sed -n "/$(date -d yesterday '+%Y-%m-%d')/p" storage/logs/laravel.log - 统计最近 24 小时 ERROR 数量:
grep -c "$(date -d '24 hours ago' '+%Y-%m-%d')" storage/logs/laravel.log - 以上命令覆盖日常排查的高频场景,便于快速定位问题。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux服务器上Laravel日志管理策略
本文地址: https://pptw.com/jishu/761800.html
