1. 使用基础命令行工具实时监控
Ubuntu系统自带的基础命令行工具可快速查看Node.js日志,适合简单监控场景:
tail -f /var/log/nodejs/app.log(需替换为实际日志路径)。tail -f /var/log/nodejs/app.log | grep 'error'。watch -n 2 tail -f /var/log/nodejs/app.log。2. 通过PM2进程管理器监控
PM2是Node.js生产环境常用进程管理工具,内置日志管理与监控功能:
pm2 start app.js --name my-app --log /var/log/nodejs/my-app.log。pm2 logs命令实时查看所有应用的日志;pm2 logs my-app查看特定应用的日志;pm2 logs --json以JSON格式输出日志(便于后续解析)。pm2 set pm2-logrotate:max_size 10M(单文件最大10MB)、pm2 set pm2-logrotate:retain 7(保留最近7天日志)。3. 利用Node.js日志库实现结构化记录
通过Winston、Bunyan等日志库,可实现结构化日志(如JSON格式)、多传输目的地(文件、控制台、数据库),提升日志可分析性:
npm install winston后,配置如下:const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(), // 结构化输出
transports: [
new winston.transports.Console(), // 输出到控制台
new winston.transports.File({ filename: 'error.log', level: 'error' }), // 错误日志单独文件
new winston.transports.File({ filename: 'combined.log' }) // 所有日志合并文件
]
});
logger.info('Server started on port 3000');
logger.error('Database connection failed');
npm install bunyan后,配置如下:const bunyan = require('bunyan');
const logger = bunyan.createLogger({
name: 'myapp',
streams: [
{ level: 'info', stream: process.stdout }, // 输出到控制台
{ level: 'error', path: 'app-error.log' } // 错误日志写入文件
]
});
logger.info('This is an info log.');
logger.error('This is an error log.');
4. 借助系统日志工具journalctl
若Node.js应用以systemd服务运行(如通过systemctl start my-node-app启动),可使用journalctl查看系统级日志:
journalctl(实时滚动显示)。journalctl -u my-node-app.service(替换为实际服务名)。journalctl -u my-node-app.service | grep 'warning'(过滤“warning”关键词)。5. 部署第三方集中式日志管理工具
对于生产环境,推荐使用ELK Stack(Elasticsearch+Logstash+Kibana)或Graylog实现日志集中化、可视化与高级分析:
sudo apt install elasticsearch)、Logstash(sudo apt install logstash)、Kibana(sudo apt install kibana)。/etc/logstash/conf.d/nodejs.conf,内容如下:input {
file {
path => "/var/log/nodejs/*.log" # 日志文件路径
start_position => "beginning"
sincedb_path => "/dev/null" # 测试时使用(避免记录读取位置)
}
}
output {
elasticsearch {
hosts => ["localhost:9200"] # Elasticsearch地址
index => "nodejs-logs-%{+YYYY.MM.dd}" # 按日期分索引
}
stdout { codec => rubydebug } # 控制台输出(测试用)
}
sudo systemctl start elasticsearch logstash kibana。http://服务器IP:5601),配置索引模式(如nodejs-logs-*),即可通过可视化界面搜索、分析日志。6. 日志监控最佳实践
debug(详细信息),生产环境用info(常规运行信息)、warn(警告)、error(错误),避免无关日志占用空间。timestamp、level、message、requestId等字段),便于后续通过工具过滤、聚合分析。