Linux环境下Laravel日志管理技巧
Laravel默认将日志文件存储在项目根目录的storage/logs
文件夹中(如laravel.log
或按日期分割的文件,如laravel-2025-09-23.log
)。通过SSH连接到服务器后,可使用cd /path/to/your/laravel-project/storage/logs
进入该目录,使用ls -l
查看日志文件列表。
Laravel支持8种日志级别(从低到高依次为debug
、info
、notice
、warning
、error
、critical
、alert
、emergency
),可根据需求调整记录的日志详细程度。
.env
文件,设置LOG_LEVEL
参数(如LOG_LEVEL=error
仅记录错误及以上级别日志);config/logging.php
文件,修改default
字段或对应通道的level
选项(如将daily
通道的level
设为warning
)。为避免日志文件无限膨胀占用磁盘空间,推荐使用Linux系统自带的logrotate
工具实现自动轮转。
/etc/logrotate.d/
目录下新建laravel
文件,添加以下内容(需替换/path/to/your/laravel
为实际项目路径):/path/to/your/laravel/storage/logs/*.log {
daily # 每天轮转一次
missingok # 若日志文件不存在也不报错
rotate 14 # 保留最近14天的日志
compress # 压缩旧日志(节省空间)
notifempty # 若日志为空则不轮转
create 640 www-data adm # 创建新日志文件并设置权限(根据实际Web用户调整,如www-data、nginx等)
}
sudo logrotate -vf /etc/logrotate.d/laravel
验证配置是否生效。通过Laravel提供的Log
门面,可在代码中便捷记录不同级别的日志,便于后续排查问题。常用方法如下:
use Illuminate\Support\Facades\Log;
// 记录信息日志(用于调试常规流程)
Log::info('用户登录成功', ['user_id' => 1, 'ip' => request()->ip()]);
// 记录错误日志(用于捕获异常)
try {
// 业务逻辑
} catch (\Exception $e) {
Log::error('订单创建失败', ['exception' => $e, 'order_data' => $orderData]);
}
// 记录警告日志(用于提示潜在问题)
Log::warning('库存不足', ['product_id' => 101, 'stock' => 5]);
日志会自动写入当前配置的通道(如daily
或single
)。
对于需要集中管理、实时监控或高级分析的场景,可集成第三方日志工具,提升管理效率:
config/logging.php
中添加对应通道(如Papertrail的syslog
通道),并配置API密钥和端点。确保storage/logs
目录及日志文件具有正确的权限,避免因权限问题导致日志无法写入。
chmod -R 755 storage/logs
(使所有者可读写执行,其他用户可读执行);chmod 640 storage/logs/*.log
(使所有者可读写,所属组可读,其他用户无权限);www-data
,可执行chown -R www-data:www-data storage/logs
(将目录及文件所有者设为www-data
)。tail
命令实时查看日志文件的最新内容(如tail -f storage/logs/laravel.log
),便于快速定位线上问题;php artisan log:clear
清除所有旧日志文件(仅保留最新日志,具体取决于config/logging.php
中的days
配置);0 0 * * * find /path/to/your/laravel/storage/logs -type f -name "*.log" -mtime +7 -exec rm {} \;
(该命令每天0点执行,删除storage/logs
目录下超过7天的.log
文件)。若需更灵活的日志管理(如将日志写入不同文件、数据库或远程服务),可在config/logging.php
中自定义通道。例如,添加一个orders
通道用于记录订单相关日志:
'channels' => [
'orders' => [
'driver' => 'daily', // 按天轮转
'path' => storage_path('logs/orders.log'), // 日志文件路径
'level' => 'info', // 记录info及以上级别日志
'days' => 30, // 保留30天日志
],
],
使用时通过指定通道记录日志:Log::channel('orders')->info('订单支付成功', ['order_id' => 202]);
。