Linux环境下Laravel日志管理指南
Laravel的日志文件默认集中存储在项目根目录下的storage/logs文件夹中,常见文件包括laravel.log(框架主日志)、按日期命名的每日日志(如laravel-2025-10-09.log,使用daily通道时生成)。通过SSH登录服务器后,可通过cd /path/to/project/storage/logs快速访问该目录。
Laravel支持8种日志级别(从高到低):emergency(系统不可用)、alert(必须立即处理)、critical(关键组件失败)、error(运行时错误)、warning(异常但可恢复)、notice(正常但重要的事件)、info(常规信息)、debug(详细调试信息)。
通过修改项目根目录下的.env文件中的LOG_LEVEL变量,可全局控制日志记录级别(仅记录该级别及以上的日志)。例如,生产环境建议设置为error(仅记录错误及以上),开发环境可设置为debug(记录详细信息):
LOG_LEVEL=error。
为防止日志文件无限膨胀占用磁盘空间,需使用Linux系统自带的logrotate工具实现自动轮转。创建/etc/logrotate.d/laravel配置文件,添加以下内容(根据项目路径调整):
/path/to/your/laravel/storage/logs/*.log {
daily # 每天轮转一次
missingok # 若日志文件不存在也不报错
rotate 14 # 保留最近14天的日志
compress # 压缩旧日志(节省空间)
notifempty # 若日志为空则不轮转
create 640 www-data adm # 创建新日志文件,权限640,所有者www-data(Apache/Nginx用户),所属组adm
}
保存后,logrotate会按配置自动执行(通常每日由cron触发)。
Laravel提供的Log门面可方便在代码中记录日志,支持链式调用和上下文信息传递。常用方法如下:
use Illuminate\Support\Facades\Log;
// 记录不同级别的日志
Log::emergency('系统不可用!'); // 紧急情况
Log::alert('需要立即处理的事件!'); // 高优先级警报
Log::critical('数据库连接失败!'); // 关键组件故障
Log::error('订单支付失败:'.$order_id); // 运行时错误(带上下文)
Log::warning('API响应超时:'.$url); // 异常但可恢复
Log::notice('用户登录成功:'.$user_id); // 正常但重要的事件
Log::info('用户访问了首页'); // 常规信息
Log::debug('请求参数:'.print_r($request->all(), true)); // 调试详情(需开启debug模式)
日志会自动写入对应通道的文件中(如single通道对应laravel.log)。
对于需要更强大功能的场景(如实时监控、搜索、告警、分布式追踪),可集成第三方日志管理工具:
config/logging.php自定义处理器(如发送日志到数据库、Slack、邮件等)。例如,添加Slack通知通道:'slack' => [
'driver' => 'slack',
'url' => env('SLACK_WEBHOOK_URL'), // Slack webhook地址
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => 'critical',
],
config/logging.php配置Syslog通道即可集成:'papertrail' => [
'driver' => 'syslog',
'level' => 'info',
'facility' => LOG_USER,
'options' => SYSLOG_RFC5424,
'host' => env('PAPERTRAIL_HOST'),
'port' => env('PAPERTRAIL_PORT'),
],
除logrotate自动轮转外,还需定期清理过期日志以避免磁盘空间耗尽:
find命令删除超过14天的日志文件(谨慎操作,避免误删):find /path/to/your/laravel/storage/logs -type f -name "*.log" -mtime +14 -exec rm -f {} \;crontab -e),添加:0 1 * * * find /path/to/your/laravel/storage/logs -type f -name "*.log" -mtime +14 -exec rm -f {} \;laravel.log),可使用:truncate -s 0 storage/logs/laravel.log(清空文件内容但不删除文件)或echo "" > storage/logs/laravel.log。日常运维中,需定期查看日志以快速定位问题:
tail命令(-f参数跟随文件更新):tail -f storage/logs/laravel.logless命令(支持上下翻页、搜索):less storage/logs/laravel.log(按/keyword可搜索关键词,按q退出)grep命令筛选(如查看所有error日志):grep "error" storage/logs/laravel.logwc -l命令统计日志行数(了解日志量大小):wc -l storage/logs/laravel.log。