宝塔Nginx 把网站访问日志按天分割

两种方案:①Nginx 按天生成独立日志文件(推荐实时);②宝塔计划任务 + logrotate 切割已有自定义日志。 注意:宝塔默认只切割站点自带日志,自己新增的*_baiduspider.log不会自动切割,时间久文件超大

方式 1:Nginx 按日期输出日志(每天生成一个新文件)

Nginx 本身不支持变量直接在access_log文件名使用,需要用strftime,nginx 官方 access_log 不支持日期变量,不能直接写baidu_$(date +%Y%m%d).log。 ✅可行方案:使用logrotate做日志切割(Linux 系统自带,宝塔也在用)。

场景:你单独记录的百度爬虫日志

示例日志路径: /www/wwwlogs/www.test.com_baiduspider.log

1、新建 logrotate 配置文件 

vi /etc/logrotate.d/baidu_spider

粘贴下面全部内容: 

/www/wwwlogs/www.test.com_baiduspider.log { daily rotate 30 missingok notifempty compress dateext dateformat -%Y%m%d create 0644 www www postrotate /www/server/nginx/sbin/nginx -s reopen > /dev/null 2>/dev/null endscript }

参数说明:

  • daily每天切割

  • rotate 30:保留最近 30 天日志,旧的自动删除

  • dateext dateformat -%Y%m%d:切割后文件名:www.test.com_baiduspider.log-20260823.gz

  • compress:压缩旧日志,节省磁盘;不想压缩删掉compress

  • create 0644 www www:新建日志文件权限,宝塔用户组 www

  • postrotate:切割后通知 nginx 重新打开日志文件,关键,否则日志不写入新文件

保存退出。

手动测试是否生效 

logrotate -d /etc/logrotate.d/baidu_spider

无报错,再手动执行一次切割: 

logrotate -f /etc/logrotate.d/baidu_spider

此时 /www/wwwlogs 目录就会生成带日期后缀的历史日志。

logrotate 系统默认每天凌晨自动执行,无需宝塔计划任务。


方式 2:不修改 Nginx 配置,使用 shell 脚本 + 宝塔计划任务(适合方案三提取的 baidu 日志)

如果你是用 grep 提取百度爬虫到单独文件,不想碰 logrotate。 脚本 /www/extract_baidu_log.sh
 

#!/bin/bash DATE=$(date +%Y%m%d) domain="www.test.com" src_log="/www/wwwlogs/${domain}.log" out_log="/www/wwwlogs/${domain}_baidu_${DATE}.log" # 提取当日百度蜘蛛记录写入当日文件 grep -i "Baiduspider" ${src_log} > ${out_log}

⚠️缺点:这种方式只能切割已经生成的旧日志,不能实时流式写入;适合离线分析。

宝塔面板 →计划任务 →Shell 脚本,设置每天凌晨执行。

方式 3:Referer 百度来源日志(baidu.com访客来源)同样切割

如果你的日志是www.test.com_baidu_refer.log,复制一份 logrotate 配置,把文件名替换即可。

 

/www/wwwlogs/www.test.com_baidu_refer.log { daily rotate 30 missingok notifempty compress dateext dateformat -%Y%m%d create 0644 www www postrotate /www/server/nginx/sbin/nginx -s reopen > /dev/null 2>/dev/null endscript }

⚠️常见踩坑

  1. 切割完日志不再写入:一定不能少nginx -s reopen,不能用nginx -s reload,reload 会短暂断服务。

  2. 文件权限报错:宝塔日志属主是www:www,配置里面写create 0644 www www

  3. 宝塔升级 nginx 不会影响/etc/logrotate.d/下自定义配置。

  4. 查看切割后的日志:

 

#看压缩后的日志 zcat /www/wwwlogs/www.test.com_baiduspider.log-20260823.gz #实时看今天日志 tail -f /www/wwwlogs/www.test.com_baiduspider.log

完整工作流总结(推荐)

  1. nginx 配置实时输出百度爬虫日志到xxx_baiduspider.log

  2. /etc/logrotate.d/baidu_spider配置实现每日自动分割,保留 30 天,自动压缩

  3. 不要用宝塔自带日志切割,宝塔不会识别你新增的自定义日志。

如果你把你的实际域名发给我,我给你一份直接复制粘贴的完整配置。

补充:查看 logrotate 运行状态 

cat /var/lib/logrotate/status

本文网址: https://www.gd230.com/a/176.html
下一篇: