winston

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

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

开始课程

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

Winston 是 Node.js 环境下最流行的日志记录库。它提供简单通用的 API,支持按不同重要性级别记录日志、格式化日志,并将其发送到不同位置(控制台、文件、数据库、外部服务)。与简单的 console.log 不同,winston 让你完全控制日志记录:可以按大小或日期配置日志轮转、按级别(info, warn, error, debug)过滤消息、添加元数据(时间、请求 ID),甚至同时使用多个传输通道。它是生产环境应用中进行监控、调试和审计的不可或缺的工具。

安装

通过 npm 或 yarn 安装 winston:

npm install winston# 或yarn add winston

主要功能

  1. 日志级别:error, warn, info, http, verbose, debug, silly。
  2. 传输通道:Console, File, HTTP, Stream 及自定义传输。
  3. 格式:JSON、纯文本、时间戳、彩色输出。
  4. 组合多个传输通道:例如,错误写入文件,info 输出到控制台。
  5. 自定义传输和格式:可集成 Logstash、Sentry、Papertrail 等。
  6. 日志轮转:通过额外模块 winston-daily-rotate-file 实现。
  7. 异常与未处理的拒绝:自动捕获未处理的错误。

JavaScript (Node.js) 代码示例

const winston = require('winston');

// 创建日志记录器const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp(), 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('内存不足', { memoryUsage: process.memoryUsage() });try { throw new Error('出错了');} catch (err) { logger.error('处理请求时出错', { error: err.message, stack: err.stack });}

何时使用

Winston 适用于所有需要结构化日志记录的 Node.js 项目:Web 服务器 (Express, Koa)、微服务、CLI 工具、机器人、ETL 流程。在生产环境中它尤其有用,便于集中收集日志、分析错误并快速定位问题。如果你的项目使用 TypeScript,winston 提供完整的类型支持。

替代方案:pino (速度更快,更轻量)、log4js (通过 XML/JSON 配置)、bunyan (JSON 格式日志)。但 winston 仍然是最灵活、最广泛的解决方案。

推荐