Node.js应用的日志路径通常由配置决定,常见位置包括:
/var/log/nodejs/
(部分系统默认存放路径);logs/
文件夹(如./logs/app.log
);LOG_PATH
等环境变量自定义路径(如LOG_PATH=/var/log/myapp.log
)。config.js
)或启动命令确认。Debian系统自带的命令行工具可快速查看和处理日志:
cat
:查看完整日志文件(如cat /path/to/app.log
);tail
:实时监控日志更新(如tail -f /path/to/app.log
,常用于跟踪实时错误);grep
:搜索特定关键词(如grep "ERROR" /path/to/app.log
提取所有错误日志);awk
/sed
:提取字段或处理文本(如awk -F',' '{print $2, $5}' access.log
按逗号分隔并打印第2、5列);sort
/uniq
:统计日志频率(如sort -k3,3n access.log | uniq -c | sort -nr
按第三列排序并统计唯一出现次数)。对于复杂场景(如大规模日志、长期存储、可视化),推荐专用工具:
日志文件过大会占用磁盘空间,需通过logrotate工具定期轮转(压缩、删除旧日志):
/etc/logrotate.d/nodejs
):/path/to/your/logfile.log {
daily # 每天轮转
missingok # 文件不存在时不报错
rotate 7 # 保留7份旧日志
compress # 压缩旧日志(如.gz格式)
notifempty # 日志为空时不轮转
create 0640 root adm # 创建新日志文件的权限和所有者
}
执行logrotate -f /etc/logrotate.d/nodejs
可手动触发轮转。采用结构化日志格式(如JSON)可提升日志可解析性,便于后续分析:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(), // JSON格式输出
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' }),
new winston.transports.Console() // 控制台输出
]
});
bunyan -o short app.log
)格式化日志,便于阅读。设置实时监控和警报规则,及时响应关键问题:
以上方法覆盖了从基础到高级的日志分析需求,可根据应用规模(如小型应用用命令行+PM2,大型应用用ELK+Graylog)、团队技术栈选择合适的方案。