CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Node.js 框架与 ORM/课时/日志
RawBlame
课时目录12 节

Node.js 框架与 ORM

  1. 01Node 框架生态
  2. 02Fastify
  3. 03Hono
  4. 04fetch 与 HTTP 客户端
  5. 05Drizzle ORM
  6. 06Knex 查询构建
  7. 07Sequelize
  8. 08模板引擎
  9. 09Vitest 测试
  10. 10日志
  11. 11生产运行
  12. 12综合练习

日志

winston、morgan、logging。

25 分钟

日志

线上排障靠 结构化日志,不是 console.log 堆砌。Node 生态常见 Pino(Fastify 默认)、Winston、Morgan(HTTP 访问日志) 组合使用。

学习目标

  • 理解结构化 JSON 日志字段
  • 在 Fastify 中用 pino 记录请求与错误
  • 区分 access log 与 application log

Pino(推荐配合 Fastify)

const app = Fastify({
  logger: {
    level: process.env.LOG_LEVEL || "info",
  },
});

app.get("/api/tracks/:slug", async (request) => {
  request.log.info({ slug: request.params.slug }, "fetch track");
  return { slug: request.params.slug };
});

输出单行 JSON,便于 ELK、Loki、CloudWatch 检索。不要在 log 里写密码、token、完整信用卡号。

Winston 与 Morgan

import winston from "winston";

export const logger = winston.createLogger({
  level: "info",
  format: winston.format.json(),
  transports: [new winston.transports.Console()],
});
// Express 访问日志
import morgan from "morgan";
app.use(morgan("combined"));
工具用途
pino高性能应用日志,Fastify 内置
winston灵活 transport(文件、远程)
morganHTTP 访问行(method、url、status)

实践纪律

  • 每个请求带 requestId(中间件生成,全链路透传)
  • 错误 log 带 err 对象栈,对外 API 仍返回统一 JSON(见 node-errors)
  • 日志级别:debug 开发、info 正常、warn 可恢复、error 需跟进

生产采集与轮转见 nodejs-advanced-essentials 与 docker-essentials。

练习

  • 开启 Fastify logger,观察一条 POST 的 JSON 输出
  • 用 winston 写文件 transport(本地 logs/app.log)
  • 列出你项目「绝不能进日志」的三类字段

小结

下一课 pm2 与 cluster 概念。

结构化、分级、无秘密——日志是生产运行的地基。
加载本节练习…
← 上一课Vitest 测试下一课 →生产运行