1. 使用内置命令实时查看日志
对于直接运行的Node.js应用(未通过进程管理工具),可通过tail -f命令实时追踪日志文件的新增内容。例如,若日志文件路径为/var/log/nodejs/app.log,执行tail -f /var/log/nodejs/app.log,终端将持续显示日志末尾的新行;按Ctrl+C可停止。若需筛选特定关键字(如错误信息),可结合grep命令:tail -f /var/log/nodejs/app.log | grep "error",仅显示包含“error”的日志行。
2. 通过PM2管理日志(推荐生产环境使用)
PM2是Node.js常用的进程管理工具,内置强大的日志管理功能。首先全局安装PM2:sudo npm install pm2 -g;然后用PM2启动应用:pm2 start app.js(app.js替换为你的入口文件);查看所有应用的实时日志:pm2 logs;若需查看特定应用的日志,用应用名称或ID替换:pm2 logs <app_name>。PM2还支持日志轮换(避免单个文件过大),可通过pm2 set pm2:log_rotate true开启,默认保留7天的日志。
3. 利用系统日志工具(Systemd服务场景)
若Node.js应用通过Systemd以服务形式运行(如my-nodejs-app.service),可使用journalctl命令查看系统日志。基本用法:sudo journalctl -u my-nodejs-app.service -f,其中-u指定服务名称,-f实时跟踪日志。若需过滤特定级别的日志(如错误),可添加--priority=err参数:sudo journalctl -u my-nodejs-app.service -f --priority=err。
4. 结构化日志库提升日志可读性与分析性
为便于日志的集中管理和分析,建议使用结构化日志库(如Winston、Bunyan)。以Winston为例,安装:npm install winston;配置文件(如logger.js):
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(), // 结构化输出(JSON格式)
transports: [
new winston.transports.Console(), // 输出到控制台
new winston.transports.File({ filename: 'error.log', level: 'error' }), // 错误日志单独文件
new winston.transports.File({ filename: 'combined.log' }) // 所有日志合并文件
]
});
module.exports = logger;
在应用中使用:const logger = require('./logger'); logger.info('Server started on port 3000');。结构化日志(如JSON)便于后续用ELK、Graylog等工具进行分析。
5. 第三方集中式日志管理(大规模应用推荐)
对于分布式或大规模应用,建议使用集中式日志管理工具,实现日志的统一收集、存储和可视化。常见方案:
winston-elasticsearch传输器)。winston-graylog2传输器)。6. 高效筛选与分析技巧
grep快速查找特定日志(如grep "user_login" app.log)。multitail同时监控多个日志文件(安装:sudo apt-get install multitail;使用:multitail /var/log/nodejs/*.log)。logrotate工具(配置文件:/etc/logrotate.d/nodejs),设置按大小或时间分割日志。