Laravel 提供了强大的日志系统,结合 Linux 平台的特点,可以构建高效的日志管理方案。以下是完整的解决方案:
在 config/logging.php
中配置:
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily', 'syslog'],
'ignore_exceptions' => false,
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 14, // 保留14天的日志
],
'syslog' => [
'driver' => 'syslog',
'level' => 'error', // 只记录错误级别到系统日志
],
// 其他通道...
],
Laravel 可以集成到 Linux syslog 系统:
确保 syslog 服务运行:
sudo systemctl status rsyslog
配置 rsyslog 接收 Laravel 日志(在 /etc/rsyslog.d/laravel.conf
):
if $programname == 'laravel' then /var/log/laravel.log
& stop
重启 rsyslog:
sudo systemctl restart rsyslog
创建 /etc/logrotate.d/laravel
:
/var/www/your-project/storage/logs/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 644 www-data www-data
sharedscripts
postrotate
/usr/bin/find /var/www/your-project/storage/logs/ -type f -name "*.log" -mtime +14 -delete
endscript
}
测试配置:
sudo logrotate -d /etc/logrotate.d/laravel
示例 Fluentd 配置:
<source>
@type tail
path /var/www/your-project/storage/logs/laravel.log
pos_file /var/log/td-agent/laravel.log.pos
tag laravel
format none
</source>
<match laravel>
@type elasticsearch
host localhost
port 9200
logstash_format true
logstash_prefix laravel
</match>
异步日志:使用 queue
驱动
'channels' => [
'async' => [
'driver' => 'stack',
'channels' => ['daily'],
'via' => Illuminate\Log\LogManager::class,
'connection' => 'redis',
],
],
日志级别控制:生产环境使用 'level' => 'error'
安装 spatie/laravel-prometheus
包监控日志错误率
# 使用 fail2ban 监控错误日志
sudo nano /etc/fail2ban/jail.d/laravel.conf
内容:
[laravel-auth]
enabled = true
filter = laravel-auth
logpath = /var/www/your-project/storage/logs/laravel.log
maxretry = 5
bantime = 3600
查看实时日志:
tail -f storage/logs/laravel.log
按日期筛选日志:
grep "2023-11-01" storage/logs/laravel.log
查找错误日志:
grep -i error storage/logs/laravel.log
通过以上配置,您可以构建一个高效、可靠的 Laravel 日志管理系统,充分利用 Linux 平台的日志管理工具和功能。