Ubuntu 上 Node.js 日志存储最佳实践
一 日志库选择与结构化输出
二 日志轮转与存储路径
/var/log/nodejs/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root adm
}
三 性能与安全
四 集中式日志与监控告警
五 快速落地示例
const winston = require('winston');
const { createLogger, format, transports } = winston;
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = createLogger({
level: 'info',
format: format.combine(
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss.SSS' }),
format.errors({ stack: true }),
format.json()
),
defaultMeta: { service: 'my-app', hostname: require('os').hostname() },
transports: [
new transports.Console(),
new DailyRotateFile({
filename: '/var/log/nodejs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '100m',
maxFiles: '14d'
}),
new DailyRotateFile({
level: 'error',
filename: '/var/log/nodejs/error-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '50m',
maxFiles: '30d'
})
]
});
logger.info('Server started', { port: 3000, env: process.env.NODE_ENV });
logger.error('DB connection failed', { err: err.message, stack: err.stack });
/var/log/nodejs/*.log {
daily
rotate 14
compress
missingok
notifempty
create 0640 root adm
}