TypeScript 日志记录:2024 年最佳库与工具

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

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

开始课程

TypeScript 日志记录:最佳解决方案

日志记录是任何生产级应用程序的关键组件。对于 TypeScript 生态系统,存在众多库,每个都提供独特的功能集。在本文中,我们将探讨五个最佳解决方案:Winston、Pino、Bunyan、Log4js 和 TSLog。您将了解它们的优势、配置特点,并获得现成的代码示例。



1. Winston — 通用标准

Winston 是 Node.js 最流行的日志记录库,完全支持 TypeScript。它提供了强大的传输系统(日志发送目标)和格式化功能。



import winston from 'winston';

const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), transports: [ new winston.transports.Console(), new winston.transports.File({ filename: 'error.log', level: 'error' }) ]});

logger.info('应用程序已启动', { service: 'user-service' });logger.error('数据库连接错误', { error: err.message });


优势:

  • 灵活的传输系统(文件、控制台、HTTP、MongoDB、Elasticsearch)
  • 通过 winston-daily-rotate-file 内置日志轮转支持
  • 与 TypeScript 完美集成 — 完全类型化
  • 与性能分析器和 APM 系统兼容


2. Pino — 超快速日志记录器

Pino 专注于性能 — 比 Winston 快 5-10 倍。是高负载系统和微服务的理想选择。



import pino from 'pino';

const logger = pino({ level: process.env.LOG_LEVEL || 'info', transport: { target: 'pino-pretty', options: { colorize: true } }});

logger.info({ user: { id: 123 } }, '用户已授权');


关键特性:

  • 最低的 CPU 和内存消耗
  • 原生支持 Node.js streams
  • 高效的对象序列化
  • 支持子日志记录器进行上下文日志记录


3. Bunyan — Joyent 的结构化日志记录

Bunyan 专为微服务架构设计。所有日志以 JSON 格式输出,便于解析和分析。



import bunyan from 'bunyan';

const logger = bunyan.createLogger({ name: 'myapp', level: 'info', serializers: { req: bunyan.stdSerializers.req, err: bunyan.stdSerializers.err }});

logger.info({ req: request }, '传入请求');


特性:

  • 内置 HTTP 请求和错误序列化器
  • 支持 ringbuffer 存储最近 N 条记录
  • bunyan CLI 工具用于控制台格式化输出
  • 与 ELK 栈轻松集成


4. Log4js — 来自 Java 的熟悉方法

Log4js 是流行 Java 框架 Log4j 的移植版。通过级别和附加器提供熟悉的配置方式。



import log4js from 'log4js';

log4js.configure({ appenders: { out: { type: 'stdout' }, app: { type: 'file', filename: 'application.log' } }, categories: { default: { appenders: ['out', 'app'], level: 'debug' } }});

const logger = log4js.getLogger();logger.debug('连接调试');logger.error('严重错误');


优势:

  • 灵活的分类和过滤器系统
  • 支持多种附加器(文件、数据库、TCP)
  • 可为不同模块重写日志级别
  • 内置集群支持


5. TSLog — 专为 TypeScript 设计的轻量级解决方案

TSLog 是一个极简主义库,专门为 TypeScript 编写。非常适合小型项目

推荐