首页主机资讯Ubuntu Node.js日志轮转配置指南

Ubuntu Node.js日志轮转配置指南

时间2025-10-20 11:32:03发布访客分类主机资讯浏览794
导读:Ubuntu Node.js日志轮转配置指南 在Ubuntu系统中,Node.js应用程序的日志轮转可通过logrotate工具(系统自带)或Node.js日志库内置功能实现。以下是详细配置步骤及注意事项: 一、使用logrotate工具配...

Ubuntu Node.js日志轮转配置指南

在Ubuntu系统中,Node.js应用程序的日志轮转可通过logrotate工具(系统自带)或Node.js日志库内置功能实现。以下是详细配置步骤及注意事项:

一、使用logrotate工具配置(系统级推荐)

logrotate是Ubuntu默认的日志管理工具,支持自动轮转、压缩、删除旧日志,适用于大多数Node.js应用。

1. 安装logrotate

多数Ubuntu版本已预装logrotate,未安装时可通过以下命令安装:

sudo apt-get update
sudo apt-get install logrotate

2. 创建Node.js专用配置文件

/etc/logrotate.d/目录下创建新配置文件(如nodejs),用于定义Node.js日志的轮转规则:

sudo nano /etc/logrotate.d/nodejs

3. 配置日志轮转规则

在配置文件中添加以下内容(根据实际路径修改/path/to/your/nodejs/app/logs/*.log):

/path/to/your/nodejs/app/logs/*.log {

    daily                   # 每日轮转(可选:weekly/monthly)
    rotate 7                # 保留7个轮转后的日志文件
    compress                # 压缩旧日志(节省空间)
    delaycompress           # 延迟压缩(当前轮转的日志不压缩,下次轮转时再压缩)
    missingok               # 日志文件不存在时不报错
    notifempty              # 日志为空时不轮转
    create 0640 root adm    # 创建新日志文件,权限0640,属主root,属组adm
    sharedscripts           # 多个日志文件匹配时,只执行一次postrotate脚本
    postrotate
        # 若使用systemd管理Node.js应用,可重启服务以释放日志句柄
        systemctl restart your-nodejs-app.service
        # 或发送HUP信号给Node.js进程(需替换为实际PID文件路径)
        # kill -HUP `cat /path/to/your/nodejs/app/pidfile`
    endscript
}
    

4. 测试配置有效性

使用-f参数强制执行轮转(模拟自动执行),检查是否有错误:

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

5. 验证自动执行

logrotate默认通过/etc/cron.daily/logrotate每日自动运行,可通过以下命令查看轮转状态:

tail -f /var/log/logrotate.log

二、使用Node.js日志库内置轮转(应用级控制)

若需更细粒度的轮转控制(如按文件大小、时间动态轮转),可使用winston+winston-daily-rotate-filepino等库。

1. 安装依赖库

winston为例,安装所需模块:

npm install winston winston-daily-rotate-file

2. 配置日志轮转

在Node.js应用代码中添加以下配置(示例):

const winston = require('winston');
    
const DailyRotateFile = require('winston-daily-rotate-file');


const transport = new DailyRotateFile({

    filename: '/path/to/your/nodejs/app/logs/application-%DATE%.log', // 日志文件名(含日期占位符)
    datePattern: 'YYYY-MM-DD',                                   // 日期格式
    zippedArchive: true,                                         // 压缩旧日志
    maxSize: '20m',                                              // 单个日志文件最大20MB
    maxFiles: '14d',                                             // 保留14天内的日志
    level: 'info'                                                // 日志级别
}
    );


const logger = winston.createLogger({

    format: winston.format.json(),                               // 日志格式(JSON)
    transports: [transport]                                      // 添加传输层
}
    );
    

logger.info('Hello, this is a rotated log message!');
    

3. 测试应用日志

运行Node.js应用,检查/path/to/your/nodejs/app/logs/目录下是否生成带日期的日志文件(如application-2025-10-20.log)。

三、使用PM2管理日志轮转(进程管理工具)

若用PM2管理Node.js应用,可通过pm2-logrotate插件实现日志轮转。

1. 安装pm2-logrotate插件

pm2 install pm2-logrotate

2. 配置轮转策略

设置轮转参数(如按大小、时间轮转,保留数量):

pm2 set pm2-logrotate:max_size 10M       # 单个日志文件最大10MB
pm2 set pm2-logrotate:retain 7           # 保留7个日志文件
pm2 set pm2-logrotate:compress true      # 压缩旧日志
pm2 set pm2-logrotate:rotateInterval "0 0 * * *"  # 每天0点轮转(cron语法)

3. 重启PM2应用

pm2 restart all

注意事项

  1. 日志路径一致性:确保logrotate配置中的路径与Node.js应用日志输出路径完全一致(包括文件名模式,如*.log)。
  2. 权限问题:logrotate创建的新日志文件需与Node.js应用有相同的读写权限(如create 0640 root adm中的用户/组需与运行Node.js的用户一致)。
  3. 应用重启:若日志文件被轮转后,Node.js应用仍持有旧文件的句柄,需通过postrotate脚本重启应用或发送HUP信号,确保应用写入新日志文件。
  4. 测试配置:修改logrotate配置后,务必用-d参数测试,避免因配置错误导致日志丢失。
  5. 备份旧日志:保留的旧日志文件(如rotate 7中的7个文件)建议定期备份到远程存储(如S3),防止本地磁盘空间耗尽。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu Node.js日志轮转配置指南
本文地址: https://pptw.com/jishu/729897.html
Node.js日志对Ubuntu系统性能的影响 Linux Overlay配置中常见问题

游客 回复需填写必要信息