Linux系统中Laravel日志管理指南
Laravel的日志文件默认存储在项目根目录的storage/logs文件夹下(如laravel.log是默认的全局日志文件)。在Linux系统中,可通过以下基础命令快速操作日志:
tail -f storage/logs/laravel.log,可实时跟踪日志输出,便于调试实时问题;less storage/logs/laravel.log,支持上下翻页、搜索关键词(如/error),适合查看历史日志;truncate -s 0 storage/logs/laravel.log(快速清空)或echo "" > storage/logs/laravel.log(清空内容),避免手动删除文件;find命令批量删除超过指定天数的日志,例如find /path/to/project/storage/logs -type f -name "*.log" -mtime +14 -exec rm -f {} \;(删除14天前的.log文件)。Laravel支持8种日志级别(从严重到轻微):emergency(系统不可用)、alert(必须立即处理)、critical(关键组件失败)、error(运行时错误)、warning(警告信息)、notice(普通但重要的事件)、info(常规信息)、debug(调试详情)。
.env文件中设置LOG_LEVEL变量,例如LOG_LEVEL=error(仅记录error及以上级别日志),减少不必要的日志输出;Log门面记录不同级别的日志,例如\Log::info('用户登录成功')(记录info日志)、\Log::error('数据库连接失败')(记录error日志);php artisan queue:work --log-level=warning(队列任务仅记录warning及以上级别日志)。为避免日志文件无限增长占用磁盘空间,推荐使用Linux自带的logrotate工具实现自动轮转。
/etc/logrotate.d/目录下新建laravel文件(如/etc/logrotate.d/laravel),添加以下内容(根据项目路径调整):/var/www/your_project/storage/logs/*.log {
daily # 每天轮转一次
missingok # 若日志文件不存在也不报错
rotate 14 # 保留最近14天的日志
compress # 压缩旧日志(节省空间)
notifempty # 若日志为空则不轮转
create 0640 www-data adm # 创建新日志文件,设置权限(www-data为Web用户,adm为日志组)
}
logrotate -vf /etc/logrotate.d/laravel(-v显示详细过程,-f强制轮转),验证配置是否正确。Laravel的日志配置文件位于config/logging.php,支持多种日志通道(Channel),可根据需求自定义:
stack通道(默认使用)会将日志发送到多个通道(如single和daily),适合生产环境;single通道将日志写入单个文件(如storage/logs/laravel.log),适合小型项目;daily通道每天生成一个新的日志文件(如laravel-2025-10-12.log),并支持设置保留天数(days参数),适合生产环境;'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single', 'daily'],
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14, // 保留14天的日志
],
],
可通过修改.env中的LOG_CHANNEL变量切换默认通道(如LOG_CHANNEL=daily)。若需要更强大的日志管理能力(如实时监控、搜索、告警),可集成第三方工具:
composer require monolog/monolog扩展,支持将日志发送到数据库、远程服务器(如Syslog)、消息队列等;为避免手动清理日志,可将清理命令添加到cron定时任务中:
crontab -e,添加以下内容(每天凌晨1点清理14天前的日志):0 1 * * * find /path/to/your/laravel/storage/logs -type f -name "*.log" -mtime +14 -exec rm -f {} \;
crontab -l查看当前用户的cron任务,确认命令已添加。