在Linux环境下监控Node.js应用程序日志有多种方法,以下是一些常用的解决方案:
// 使用console输出日志
console.log('Info message');
console.error('Error message');
// 或者使用更结构化的方式
const util = require('util');
const fs = require('fs');
const logFile = fs.createWriteStream('app.log', { flags: 'a' });
const logStdout = process.stdout;
console.log = function () {
logFile.write(util.format.apply(null, arguments) + '\n');
logStdout.write(util.format.apply(null, arguments) + '\n');
};
推荐使用成熟的日志库如: - Winston - 功能强大的日志库 - Bunyan - JSON格式的日志库 - Pino - 高性能日志库
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()
}));
}
tail -f /path/to/your/nodejs/app.log
grep "ERROR" /path/to/your/nodejs/app.log
multitail -cS node /path/to/your/nodejs/app.log
创建/etc/logrotate.d/nodejs-app
:
/path/to/your/nodejs/app.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 root root
sharedscripts
postrotate
kill -USR1 `cat /var/run/nodejs-app.pid 2>/dev/null` 2>/dev/null || true
endscript
}
如果Node.js应用作为systemd服务运行:
journalctl -u your-nodejs-service -f
如果使用PM2管理Node.js进程:
# 查看所有应用日志
pm2 logs
# 查看特定应用日志
pm2 logs app-name
# 清空日志
pm2 flush
# 日志文件位置
~/.pm2/logs/
集成Sentry可以实时监控和报警错误:
const Sentry = require('@sentry/node');
Sentry.init({ dsn: 'https://yourdsn@sentry.io/yourproject' });
以上方法可以根据实际需求组合使用,构建完整的Node.js日志监控解决方案。