命令行工具是最轻量的可视化方式,适合快速查看或筛选日志内容,无需额外安装复杂软件。
tail:实时查看日志文件末尾内容,常用-f参数跟踪新增日志(如tail -f /var/log/nodejs/app.log)。cat:输出日志文件全部内容(如cat /var/log/nodejs/app.log)。grep:筛选包含特定关键词的日志行(如grep "ERROR" app.log筛选错误日志,grep "2025-01-01" app.log筛选指定日期日志)。journalctl:若Node.js服务通过systemd管理(如使用pm2-systemd或直接创建服务),可通过journalctl -u your-nodejs-service-name查看系统日志,支持按时间、优先级过滤(如-p err筛选错误级别日志)。这类工具提供集中化日志存储、结构化解析、交互式可视化功能,适合生产环境或需要深度分析的场景。
/var/log/nodejs/app.log)收集、解析(如用grok过滤器提取时间、日志级别、消息)并传输到Elasticsearch;logstash.conf文件需定义input(文件路径)、filter(解析规则)、output(Elasticsearch地址);Kibana中添加索引模式(如nodejs-logs-*)即可开始探索日志。Promtail(Loki的收集器)发送到Loki,再在Grafana中创建日志面板(支持正则表达式过滤、关键词高亮)。通过日志库生成结构化日志(如JSON格式),便于后续工具解析和可视化。常用库包括:
printf格式化时间戳和消息)。示例配置:const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
new winston.transports.File({ filename: '/var/log/nodejs/app.log' }),
new winston.transports.Console()
]
});
const pino = require('pino')();
pino.info('This is an info log', { userId: 123, action: 'login' });
pm2 logs命令实时查看应用日志(包括stdout、stderr),支持--lines参数指定显示行数(如pm2 logs --lines 100显示最近100行)。PM2还会自动保存日志到~/.pm2/logs/目录,方便后续分析。使用logrotate工具定期压缩、删除旧日志,防止日志文件占用过多磁盘空间。配置示例:
/etc/logrotate.d/nodejs;/var/log/nodejs/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 root adm
}
系统会自动每天执行轮转任务,无需手动干预。
以上方法可根据需求组合使用(如用Winston生成结构化日志,用ELK Stack进行可视化;或用PM2实时监控,用Graylog长期存储)。选择时需考虑日志量、团队技术栈、可视化需求等因素。