事件起源
一切的开始是某一天mac突然报错内存不足🤷♂️,一番顺藤摸瓜后发现是我在mac上设置的nginx反代,放了两天就给我整出165gb的access.log,原因未知。
至于为什么是拍屏幕而不是截屏,那是因为空间真的一点不剩了,截不出来😅

部署newsyslog自动日志轮转
在/etc/newsyslog.d/ 下面添加配置文件即可配置日志配置轮转
比如:
sudo vim /etc/newsyslog.d/nginx
在里面添加以下内容
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
/usr/local/var/log/nginx/access.log example:admin 644 5 1024 @T00 JCD /usr/local/var/run/nginx.pid
/usr/local/var/log/nginx/error.log example:admin 644 5 1024 @T00 JCD /usr/local/var/run/nginx.pid
注意把example换成运行nginx的用户名,尽量别留空(对于mac的newsyslog,留空通常会默认为root),不然nginx可能没有权限写入日志
然后测试、重启nginx
# 测试配置
sudo nginx -t -c /usr/local/etc/nginx/nginx.conf
# 重启 nginx
sudo nginx -s stop
sudo nginx
# 强制 newsyslog 立即运行
sudo newsyslog -F
配置结构解读
1. 日志文件路径
/usr/local/var/log/nginx/access.log- Nginx 访问日志/usr/local/var/log/nginx/error.log- Nginx 错误日志
2. 所有者设置 [owner:group](可选,但建议选)
example:admin- 日志文件的所有者为example用户,属于admin组
3. 文件权限 mode
644- 文件权限为-rw-r--r--- 所有者可读写,其他用户只读
4. 保留数量 count
5- 保留 5 个旧的日志文件副本
5. 文件大小阈值 size
1024- 当日志文件达到 1024KB (1MB) 时触发轮转
6. 时间条件 when
@T00- 每天午夜 00:00 进行轮转
7. 标志位 flags
J- 使用 bzip2 压缩旧日志文件C- 如果日志文件不存在,则创建新文件D- 在压缩前创建文件的副本
8. 进程ID文件 [/pid_file](可选)
/usr/local/var/run/nginx.pid- Nginx 主进程的 PID 文件路径- 轮转后向 nginx 发送信号重新打开日志文件
更多信息可参考OpenBSD提供的newsyslog文档
配置的实际作用
这个配置定义了:
- 轮转条件:日志文件达到 1MB 或 每天午夜时轮转
- 文件管理:保留 5 个压缩的旧日志文件(如
access.log.0.bz2,access.log.1.bz2等) - 权限控制:确保新创建的日志文件有正确的权限
- 进程通知:轮转后通知 nginx 重新打开日志文件