在 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 应用的日志,确保日志文件不会无限增长,并且可以方便地进行日志分析和故障排查。