在 Debian 系统上,实现 Node.js 应用程序日志的自动化管理可以通过多种方式来完成。以下是一些常见的方法:
pm2 进程管理器pm2 是一个流行的 Node.js 进程管理器,它提供了日志管理功能。
pm2sudo npm install pm2 -g pm2 start app.js --name my-app pm2 logs my-app pm2 默认支持日志轮转。你可以通过配置文件来进一步定制日志轮转策略。
创建一个 ecosystem.config.js 文件:
module.exports = { apps: [{ name: 'my-app', script: 'app.js', instances: 'max', autorestart: true, watch: false, max_memory_restart: '1G', env: { NODE_ENV: 'development' }, env_production: { NODE_ENV: 'production' } }] }; 然后使用 pm2 start ecosystem.config.js 启动应用。
logrotatelogrotate 是一个系统工具,用于管理日志文件的轮转。
logrotatesudo apt-get install logrotate logrotate创建一个 logrotate 配置文件 /etc/logrotate.d/my-app:
/path/to/your/nodejs/logs/*.log { daily missingok rotate 7 compress notifempty create 0640 root adm } 这个配置文件会每天轮转日志文件,并保留最近 7 天的日志文件。
syslog你可以将 Node.js 应用的日志发送到系统的 syslog。
syslog 模块npm install syslog syslogconst syslog = require('syslog'); syslog.openLog('my-app', { facility: syslog.LOG_USER, option: syslog.LOG_PID | syslog.LOG_CONS }); syslog.syslog(syslog.LOG_INFO, 'This is an info message'); syslog.syslog(syslog.LOG_ERR, 'This is an error message'); syslog.closeLog(); rsyslog编辑 /etc/rsyslog.conf 或创建一个新的配置文件 /etc/rsyslog.d/50-default.conf:
if $programname == 'my-app' then /var/log/my-app.log & stop 然后重启 rsyslog 服务:
sudo systemctl restart rsyslog winston 和 winston-daily-rotate-filewinston 是一个流行的日志库,结合 winston-daily-rotate-file 可以实现日志的每日轮转。
winston 和 winston-daily-rotate-filenpm install winston winston-daily-rotate-file winstonconst winston = require('winston'); const DailyRotateFile = require('winston-daily-rotate-file'); const transport = new DailyRotateFile({ filename: 'application-%DATE%.log', datePattern: 'YYYY-MM-DD-HH', zippedArchive: true, maxSize: '20m', maxFiles: '14d' }); const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ transport ] }); logger.info('This is an info message'); 通过这些方法,你可以有效地管理 Node.js 应用的日志,确保日志文件不会无限增长,并且可以方便地进行日志分析和故障排查。