在Linux环境下管理Node.js应用日志是保证应用可维护性和故障排查的重要环节。以下是几种有效的日志管理方案:
console.log('Info message');
console.error('Error message');
console.warn('Warning message');
const util = require('util');
console.log(util.format('%s:%s', 'foo', 'bar')); // foo:bar
npm install winston
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
npm install bunyan
const bunyan = require('bunyan');
const log = bunyan.createLogger({name: 'myapp'});
log.info('Hello');
log.error({err: new Error('boom')}, 'Something went wrong');
npm install pino
const pino = require('pino');
const logger = pino({
level: 'info',
timestamp: () => `,"time":"${new Date().toISOString()}"`
});
logger.info('Hello Pino');
logger.error('This is an error');
创建/etc/logrotate.d/nodeapp
文件:
/path/to/your/nodeapp/logs/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 root root
sharedscripts
postrotate
kill -USR2 `cat /var/run/nodeapp.pid 2>/dev/null` 2>/dev/null || true
endscript
}
npm install winston-daily-rotate-file
const DailyRotateFile = require('winston-daily-rotate-file');
logger.add(new DailyRotateFile({
filename: 'application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
}));
// 使用Winston的结构化日志
logger.log({
level: 'info',
message: 'User logged in',
userId: 123,
ip: '192.168.1.1',
timestamp: new Date().toISOString()
});
npm install fluent-logger
const fluent = require('fluent-logger');
const logger = fluent.createFluentSender('app', {
host: 'localhost',
port: 24224,
timeout: 3.0
});
logger.emit('follow', {from: 'userA', to: 'userB'});
如果使用PM2管理Node.js进程:
# 查看日志
pm2 logs
# 清空日志
pm2 flush
# 禁用日志
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
选择适合您项目规模和需求的方案,合理管理日志将大大提高应用的可维护性和故障排查效率。