Laravel在Debian上的日志管理指南
Laravel作为PHP主流框架,内置基于Monolog的强大日志系统,而Debian作为服务器常用操作系统,提供了logrotate、journalctl等工具辅助日志管理。两者结合可实现日志的高效记录、存储与维护。
Laravel的日志配置主要通过两个文件完成:.env(环境变量)和config/logging.php(通道定义)。
storage/logs目录下,默认文件名为laravel.log。需确保该目录存在且具备正确权限(详见下文)。.env中通过LOG_LEVEL调整日志记录级别,可选值从低到高为debug(调试)、info(信息)、notice(注意)、warning(警告)、error(错误)、critical(严重)、alert(警报)、emergency(紧急)。生产环境建议设置为warning或error,避免日志文件过大。config/logging.php定义了多个内置通道,如single(单文件)、daily(按天分割)、slack(发送到Slack)、syslog(系统日志)等。生产环境推荐使用stack通道组合多个通道(如daily+slack),兼顾日志持久化与实时告警。Laravel需向storage/logs目录写入日志,因此需正确设置目录权限:
storage和bootstrap/cache目录的所有者设为Debian默认Web服务器用户(通常为www-data),命令:sudo chown -R www-data:www-data storage bootstrap/cache。storage/logs目录权限设为755(所有者可读写执行,其他用户可读执行),日志文件权限设为644(所有者可读写,其他用户可读),命令:sudo chmod -R 755 storage/logs、sudo chmod 644 storage/logs/*.log。为防止日志文件无限增长占用磁盘空间,需通过以下方式实现轮转与清理:
daily通道时,可在config/logging.php中设置days参数(保留天数),例如保留14天日志:'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 14, // 保留14天
],
此配置会自动每天生成新日志文件,并删除超过14天的旧文件。/etc/logrotate.d/laravel配置文件,内容示例:/path/to/your/laravel/storage/logs/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 www-data adm
}
该配置表示每天轮转日志,保留7天,压缩旧日志(延迟压缩以避免阻塞),并设置正确的权限和所有者。可通过sudo logrotate -f /etc/logrotate.d/laravel手动触发轮转。php artisan log:clear命令清除所有日志文件,或指定天数清理旧日志(如php artisan log:clear --days=30清理30天前的日志)。tail命令实时查看日志文件最新内容(如tail -f storage/logs/laravel.log);使用grep命令过滤特定信息(如grep "error" storage/logs/laravel.log)。journalctl查看系统级日志(包括Laravel日志,若配置了syslog通道),例如查看所有日志:journalctl;查看特定服务的日志:journalctl -u apache2(Apache)或journalctl -u nginx(Nginx)。gnomesystemlog(GNOME)或ksystemlog(KDE)查看系统日志,包括Laravel日志(需将Laravel日志目录链接到系统日志目录)。stack通道组合daily(日志文件)和slack(关键告警),例如:'stack' => [
'driver' => 'stack',
'channels' => ['daily', 'slack'],
'ignore_exceptions' => false,
],
这样既能保留日志文件用于历史追溯,又能在发生严重错误时通过Slack及时通知运维人员。Log::error('用户登录失败', ['user_id' => $user->id, 'email' => $user->email]); // 不记录密码