当前位置: 首页 > news >正文

如何在Debian服务器上设置Node.js日志轮转

Node.js 应用在 Debian 服务器上运行时,如果不做日志管理,app.log 会无限增长,最终占满磁盘。解决方案就是配置 日志轮转(log rotation)。下面我给你一个完整的 Debian 下 Node.js 日志轮转设置指南。

一、为什么要做日志轮转

1. 避免磁盘爆满:Node.js 应用长时间运行时,日志可能几十 GB。

2. 方便运维排查:旧日志按日期归档,新日志保持清晰。

3. 提升性能:避免单个日志文件过大导致 tail、grep 慢。

二、常见的日志轮转方案

在 Debian 中,有两种主流方式:

logrotate(推荐):Linux 内置工具,定时执行,规则灵活。

PM2 内置日志管理:如果用 PM2 管理 Node.js 进程,可以直接用它的 pm2-logrotate 插件。

下面我分别讲解。

三、方法一:使用 logrotate 配置 Node.js 日志轮转

1. 确认日志存放路径

假设 Node.js 应用的日志文件在:

/var/www/myapp/logs/app.log

2. 安装 logrotate

Debian 默认有 logrotate,没有就装:

sudo apt-get update
sudo apt-get install logrotate -y

3. 创建配置文件

在 /etc/logrotate.d/ 下新建配置:

sudo nano /etc/logrotate.d/myapp

写入内容:

/var/www/myapp/logs/*.log {daily                # 每日轮转rotate 7             # 保留7天的日志compress             # 压缩旧日志delaycompress        # 延迟一天再压缩,避免影响最新日志missingok            # 忽略不存在的日志文件notifempty           # 空日志文件不处理create 0640 www-data www-data   # 新文件权限与属主postrotate# 通知 Node.js 应用重新打开日志# 适配 pm2 的情况可以用 pm2 reload logsendscript
}

4. 测试配置

sudo logrotate -d /etc/logrotate.d/myapp

5. 强制执行轮转(验证效果)

sudo logrotate -f /etc/logrotate.d/myapp

执行后,app.log 会被切割为:

app.log
app.log.1.gz
app.log.2.gz
...

四、方法二:使用 PM2 的日志轮转插件

如果你用 PM2 管理 Node.js 进程,可以直接用 pm2-logrotate 插件。

1. 安装插件

pm2 install pm2-logrotate

2. 查看默认配置

pm2 conf

3. 修改参数

比如设置每天轮转,最多保留 7 天:

pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'
pm2 set pm2-logrotate:max_days 7

说明:

rotateInterval '0 0 * * *' → 每天凌晨轮转

max_days 7 → 保留 7 天旧日志

compress true → 压缩归档

4. 验证

观察日志目录(默认在 ~/.pm2/logs/),是否出现 .1, .2, .gz 文件。

总结:在 Debian 服务器上,给 Node.js 应用做日志轮转有两种最佳实践:

系统级 logrotate:适合任何 Node.js 部署方式。

PM2-logrotate 插件:更适合 PM2 管理的应用。

推荐你:

如果是生产环境 → 用 logrotate,稳定可靠;

如果是个人项目 + PM2 → 用 pm2-logrotate,简单方便。

http://www.dtcms.com/a/349414.html

相关文章:

  • 深度学习入门第一课——神经网络实现手写数字识别
  • java后端如何实现下载功能
  • Python爬虫实战:Selenium模拟操作爬取马蜂窝旅游攻略
  • 神经网络与梯度算法:深度学习的底层逻辑与实战解析
  • Python办公——爬虫百度翻译网页版(自制翻译小工具——进阶更新版)
  • Python爬虫框架设计:类封装与工程化实践​
  • Linux驱动开发笔记(七)——并发与竞争(下)——自旋锁信号量互斥体
  • 计算机网络课堂笔记
  • frp基础知识
  • React 学习笔记2 props、refs
  • 消息中间件RabbitMQ03:结合WebAPI实现点对点(P2P)推送和发布-订阅推送的Demo
  • 从C语言到数据结构:保姆级顺序表解析
  • 使用OpenSSL生成自签名证书
  • 基于PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化
  • 逆向抄数工程师能力矩阵:设备操作(±0.05mm 精度)× 曲面重构 ×GDT 公差分析
  • C++|UDP通讯使用总结
  • Fluent Bit系列:字符集转码测试(下)
  • Dify 从入门到精通(第 55/100 篇):Dify 的模型微调(进阶篇)
  • Devops之Jenkins:Jenkins服务器中的slave节点是什么?我们为什么要使用slave节点?如何添加一个windows slave节点?
  • 如何监控ElasticSearch的集群状态?
  • Fluent Bit系列:字符集转码测试(上)
  • LengthFieldBasedFrameDecoder 详细用法
  • Error ratio tests for 200 Gb/s per lane ISLs using PMAmeasurements
  • 李沐-第十章-实现Seq2SeqAttentionDecoder时报错
  • 什么是事件循环(Event Loop)?浏览器和 Node.js 中的事件循环有什么区别?
  • springboot整合druid(多数据源配置)
  • Python_occ 学习记录 | 阵列
  • 李沐-第十章-训练Seq2SeqAttentionDecoder报错
  • 十九、云原生分布式存储 CubeFS
  • 剧本杀APP系统开发:打造多元化娱乐生态的先锋力量