温馨提示×

怎么抓取nodejs运行日志

小樊
38
2026-10-20 02:55:09
栏目: 编程语言

抓取(收集/查看)Node.js 运行日志,通常有几种常见场景和做法,下面按“从简单到生产级”给你一个清晰指南。


一、最基础:直接看控制台日志

1. 使用 console

console.log('普通日志');
console.error('错误日志');
console.warn('警告');

运行:

node app.js

✅ 适合:本地开发、调试


二、把日志输出到文件(最简单)

1. 重定向标准输出

node app.js > app.log 2>&1
  • >:标准输出
  • 2>&1:错误也写入

查看:

tail -f app.log

✅ 适合:单进程、临时使用


三、在代码里写日志文件(推荐)

使用 fs 写日志

const fs = require('fs');

function log(msg) {
  fs.appendFileSync('app.log', `${new Date().toISOString()} ${msg}\n`);
}

log('服务启动');

⚠️ 不推荐高频写文件(性能差)


四、使用日志库(生产推荐)

1. winston(最常用)

npm install winston
const winston = require('winston');

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'app.log' })
  ]
});

logger.info('服务启动');
logger.error('出错了');

✅ 支持:

  • 日志级别
  • 多文件
  • 日志切割

2. pino(高性能)

npm install pino
const pino = require('pino');
const logger = pino({ level: 'info' });

logger.info('hello');

✅ 适合:高并发服务


五、自动切割日志(防止文件过大)

使用 winston-daily-rotate-file

npm install winston-daily-rotate-file
const DailyRotateFile = require('winston-daily-rotate-file');

new DailyRotateFile({
  filename: 'logs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '14d'
})

六、Docker / 服务器环境

Docker

docker logs -f 容器名

Node 日志直接打到 stdout 即可:

console.log / logger.info

七、生产级方案(企业常见)

  • ELK(Elasticsearch + Logstash + Kibana)
  • Grafana + Loki
  • Fluentd / Filebeat

流程:

Node.js → 日志文件 / stdout → 采集器 → 可视化

八、异常日志别忘了

process.on('uncaughtException', err => {
  logger.error('未捕获异常', err);
});

process.on('unhandledRejection', err => {
  logger.error('Promise未处理', err);
});

总结建议

场景 推荐方式
本地调试 console
小项目 文件重定向
正式服务 winston / pino
高并发 pino
云原生 stdout + 日志平台

如果你愿意,可以告诉我:

  • 是本地 / 服务器 / Docker / K8s
  • 是否生产环境
  • 是否要实时查看 or 存档分析

我可以直接给你一套可复制的配置方案。

0 踩