Linux环境下Laravel日志管理技巧
Laravel的日志默认存储在项目根目录的storage/logs文件夹中(如laravel.log)。在Linux环境下,可通过SSH登录服务器,使用cd命令进入项目目录,再通过ls查看日志文件列表。若需快速定位特定日志,可使用find命令(例如find /path/to/project/storage/logs -name "*.log")。
Laravel支持8种日志级别(从高到低依次为emergency、alert、critical、error、warning、notice、info、debug),可通过.env文件中的LOG_LEVEL参数设置记录阈值。例如:
LOG_LEVEL=error;LOG_LEVEL=debug。
也可直接修改config/logging.php中的通道配置(如'level' => 'info')覆盖全局设置。为避免日志文件无限膨胀占用磁盘空间,推荐使用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 # 创建新日志文件并设置权限(用户:组)
}
该配置可实现日志的自动分割、压缩和清理,无需手动干预。
tail命令跟踪日志文件的最新更新(如tail -f storage/logs/laravel.log),可实时监控应用运行状态;tail -n 20 storage/logs/laravel.log查看最后20条记录;grep命令过滤特定内容(如grep "error" storage/logs/laravel.log查找所有错误日志)。php artisan log:clear命令,可一键删除storage/logs目录下所有旧日志文件(仅保留最新的single或daily通道日志);0 1 * * * find /path/to/your/laravel/storage/logs -type f -name "*.log" -mtime +14 -exec rm -f {} \;
该命令会删除14天前的所有.log文件。通过Laravel的Log门面,可在代码中便捷记录不同级别的日志。例如:
use Illuminate\Support\Facades\Log;
// 记录信息日志
Log::info('用户登录成功', ['user_id' => 1]);
// 记录错误日志
Log::error('数据库连接失败', ['exception' => $e]);
日志内容会自动写入对应通道的日志文件,便于后续追踪问题。
对于更复杂的日志管理需求(如实时监控、集中存储、告警),可集成第三方工具:
config/logging.php扩展(如添加slack通道发送日志到Slack);确保storage/logs目录及日志文件的权限正确,避免因权限问题导致日志无法写入。通常设置:
chown -R www-data:adm storage/logs # 将目录所有者设为www-data(Web服务器用户),组设为adm
chmod -R 640 storage/logs # 设置目录权限为640(所有者可读写,组可读,其他无权限)
若日志文件被占用无法删除,可尝试重启Web服务器(如systemctl restart apache2)或PHP-FPM服务(如systemctl restart php-fpm)。