TypeScript 日志记录:winston 库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 winston,为什么需要它?

Winston 是一个用于 TypeScript 和 JavaScript 应用程序的强大且灵活的日志记录库。它允许将不同级别(info、warn、error、debug)的消息结构化地记录到控制台、文件、数据库或外部服务。Winston 解决了 Node.js 缺乏内置日志记录机制的问题,提供了方便的 API 来配置格式、传输目标(日志写入位置)和重要性级别。该库广泛用于生产项目、微服务和 Web 应用程序。

安装

要在 TypeScript 项目中安装 winston,请执行:

npm install winstonnpm install --save-dev @types/winston

或者通过 yarn:

yarn add winstonyarn add --dev @types/winston

主要功能

  • 日志级别:error、warn、info、http、verbose、debug、silly(可以自定义)。
  • 传输目标:Console、File、HTTP、Stream,以及自定义目标(例如,Elasticsearch)。
  • 格式:JSON、纯文本、时间戳、标签、控制台颜色。
  • 多重传输:同时写入控制台和文件。
  • 异常日志记录:自动捕获 uncaughtException。
  • TypeScript 代理封装:具有自动补全功能的类型化日志记录器。

TypeScript 代码示例

import winston from 'winston';

const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), winston.format.json() ), transports: [ new winston.transports.Console({ format: winston.format.combine( winston.format.colorize(), winston.format.simple() ) }), new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }) ]});

// 使用logger.info('服务器在端口 3000 上启动');logger.warn('内存不足');logger.error('数据库连接错误', { error: err });

何时使用 winston

Winston 非常适合以下场景:

  • 基于 Node.js/TypeScript 的后端应用程序(Express、NestJS、Fastify)。
  • 微服务架构——通过 HTTP 传输进行集中式日志收集。
  • 生产监控——将日志写入支持轮转的文件(winston-daily-rotate-file)。
  • 调试和开发——在控制台中输出带有不同级别的彩色日志。
  • 有审计要求的系统——结构化的 JSON 日志用于分析。
  • 不要在简单的脚本中使用 winston,如果 console.log 就足够了——对于小型项目来说过于冗余。同时,避免在客户端浏览器应用程序中使用 winston(那里最好使用 console 或专门的库)。

结论

Winston 是 TypeScript 项目中日志记录的事实标准。在正确配置下,它提供了灵活性、性能和类型安全性。从简单的日志记录器开始,随着应用程序的增长逐步扩展它。

推荐