Debian 上配置 Node.js 日志的实用技巧
一 基础选型与结构化输出
const winston = require('winston');
const logger = winston.createLogger({
level: process.env.LOG_LEVEL || 'info',
format: winston.format.combine(
winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
winston.format.errors({ stack: true }),
winston.format.json()
),
defaultMeta: { service: 'my-service' },
transports: [
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
new winston.transports.File({ filename: 'logs/combined.log' })
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
module.exports = logger;
以上做法覆盖库选择、级别控制、格式与多传输等基础要点,适合在 Debian 上快速落地。二 日志轮转与保留策略
const DailyRotateFile = require('winston-daily-rotate-file');
const rotateTransport = new DailyRotateFile({
filename: 'logs/application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
});
/var/www/myapp/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 www-data www-data
postrotate
# 如应用具备日志重开能力可在此通知;PM2 场景可用:pm2 reload logs
endscript
}
三 性能与可靠性优化
四 集中式日志与系统日志集成
pm2 logs 聚合查看,并与 pm2-logrotate 配合做保留与压缩。五 安全与运维实践