@crowlog/logger

中文文档
2.2.2发布于 2026/01/04MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 3189

超轻量级,零依赖性,任何JavaScript环境的可扩展日志库. 在Node.js,浏览器,和边缘运行时间工作.

中文使用文档
文档目录16 节
  1. 特征
  2. 安装
  3. 使用量
  4. 方法
  5. 儿童伐木工和工厂
  6. 运输
  7. 插件
  8. 过滤插件
  9. 编辑插件
  10. 全球背景插件
  11. Async 上下文插件
  12. 漂亮的日志
  13. 测试
  14. 比较
  15. 许可证
  16. 贷项

Header banner

Crowlog - 可扩展 JS 日志库

Crowlog是一个简单,轻量级,零依赖性,以及任何JavaScript环境的可扩展日志库.

文档   二. 支助   GitHub 图像   二. 支助   国家预防机制

特征

  • 超轻重量 - Crowlog非常轻重(小于 1kB 微小于 + gziped,见 比较) (中文(简体) ).
  • 零依赖关系 没有运行时间依赖,只是纯JavaScript.
  • 可扩展 - Crowlog被设计为可扩展的,因此可以将自己的传输和插件加入其中.
  • 简单 - Crowlog的设计简单易用.
  • 完全输入 – Crowlog 已完全输入,所以在使用时可以自动完成并输入安全.
  • 任何环境 - Crowlog在任何环境下工作,包括Node.js,浏览器,和边缘.
  • 测试友好 - Crowlog是设计为测试友好的,因此可以方便地用内移来测试你的日志.
  • 有一点意见 - Crowlog被设计成稍有见解,因此它有一个默认的传输和一些插件.
  • 漂亮的日志 - 说吧 Crowlog 漂亮的日志命令 以更可读的格式显示日志.

安装

# pnpm
pnpm install @crowlog/logger

# npm
npm install @crowlog/logger

# yarn
yarn add @crowlog/logger

使用量

基本用途:

import { createLogger } from '@crowlog/logger';

const logger = createLogger({ namespace: 'my-app' });

logger.info('Hello world');
logger.error({ error: new Error('...') }, 'Something went wrong');

[注] 日志界面要么是一个单字符串消息,要么是一个数据对象和一个消息字符串tuple.

logger.info('Hello world');
logger.info({ foo: 'bar' }, 'Hello world');

方法

Crowlog日志提供了4个不同的记录方法: debug, (中文(简体) ), info, (中文(简体) ), warn,以及 error。 。 。 .

logger.debug(/* ... */);
logger.info(/* ... */);
logger.warn(/* ... */);
logger.error(/* ... */);

儿童伐木工和工厂

Crowlog 日志提供 createChildLogger 用于创建继承父日志配置的儿童日志的方法.

import { createLogger } from '@crowlog/logger';

const logger = createLogger({ namespace: 'my-app' });
const childLogger = logger.createChildLogger({ namespace: 'child' });

或者,你可以使用 createLoggerFactory 用于创建配置相同的儿童日志.

import { createLoggerFactory } from '@crowlog/logger';

const createLogger = createLoggerFactory({ transports: /* ... */, plugins: /* ... */ });
const logger = createLogger({ namespace: 'child' });

运输

发送日志的运输控制。 默认情况下, Crowlog 使用 stdout 运输(输出JSON至控制台).

import { createLogger, createStdoutLoggerTransport } from '@crowlog/logger';

// Customize serialization
const logger = createLogger({
  namespace: 'my-app',
  transports: [
    createStdoutLoggerTransport({
      serialize: ({ level, message }) => `[${level}] ${message}`
    })
  ]
});

在测试时,使用内移:

import { createInMemoryLoggerTransport } from '@crowlog/logger';

const inMemoryTransport = createInMemoryLoggerTransport();
const logger = createLogger({
  namespace: 'my-app',
  transports: [inMemoryTransport]
});

logger.info('Test log');
const logs = inMemoryTransport.getLogs({ excludeTimestampMs: true });

见 完整文档 详细介绍运输方式和如何创建定制.

插件

插件将日志功能扩展至过滤、编辑和上下文管理.

过滤插件

控制日志到达的传输 :

import { createLogger, createFilterPlugin } from '@crowlog/logger';

const logger = createLogger({
  namespace: 'my-app',
  plugins: [
    createFilterPlugin({
      minLevel: 'info',  // Only info and above
      excludedNamespaces: ['debug-utils']  // Exclude specific namespaces
    })
  ]
});

编辑插件

自动隐藏敏感数据 :

import { createRedactPlugin } from '@crowlog/logger';

const logger = createLogger({
  namespace: 'my-app',
  plugins: [
    createRedactPlugin({
      paths: ['password', 'apiKey', 'user.email']
    })
  ]
});

logger.info({ password: 'secret', username: 'alice' }, 'Login');
// Output: { password: '[redacted]', username: 'alice' }

全球背景插件

在所有日志中添加全应用程序上下文 :

import { createGlobalLogContextPlugin } from '@crowlog/logger';

const { globalContextPlugin, setGlobalLogContext } = createGlobalLogContextPlugin();

const logger = createLogger({
  namespace: 'my-app',
  plugins: [globalContextPlugin]
});

setGlobalLogContext({ environment: 'production', version: '1.0.0' });
logger.info('Started'); // Includes environment and version

Async 上下文插件

添加请求范围上下文( 需要) async_hooks 支持:

import { createAsyncContextPlugin, wrapWithLoggerContext } from '@crowlog/async-context-plugin';

const logger = createLogger({
  namespace: 'my-app',
  plugins: [createAsyncContextPlugin()]
});

wrapWithLoggerContext({ requestId: '123' }, () => {
  logger.info('Processing'); // Includes requestId
});

见 完整文档 关于插件和如何创建自定义插件的更多细节.

漂亮的日志

格式化 JSON 开发日志 @crowlog/pretty数字 :

node index.js | npx crowlog-pretty

log-screenshot

见 漂亮的伐木指南 更多细节.

测试

使用内嵌运算在测试中捕获日志, 或新日志完全禁用日志 :

import { createNoopLogger } from '@crowlog/logger';

// No logs will be produced
const result = doSomething({ logger: createNoopLogger() });

见 测试指南 更多细节.

比较

图书馆运行时间依赖关系捆绑大小
@crowlog/logger@ 1.0.00 依赖关系1.3kB(674B 精密化+克齐普) 来源
皮诺@ 9.6.011个依赖关系7.5kB (2.9kb 精密度+克齐普) 来源
温斯通@ 3.1.711个依赖关系147.9kB(37.4kB 精密化+克齐普) 来源
包扬@1.8.1519个依赖关系15.7kB(5.6kB 变焦+克齐普) 来源

许可证

这个项目根据麻省理工学院的许可证获得许可。 见 自由主义 文档以获取更多信息.

贷项

这个项目由 . . 科伦丁·托马斯塞特。 。 。 . 如果你认为这个项目有帮助,请考虑 支持我的工作。 。 。 .

图标是 乌鸦四舍五入 从 材料符号。 。 。 .

版本与发布记录

@crowlog/logger 共发布 13 个版本,首次发布于 2025/02/07;过去 12 个月发布了 4 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.2.2latest2026/01/0410 个月前
2.2.12026/01/0210 个月前
2.2.02025/12/2910 个月前
2.1.02025/11/1611 个月前
2.0.02025/10/011.1 年前
1.2.12025/04/211.6 年前

关于 @crowlog/logger 的常见问题

@crowlog/logger 是什么?

超轻量级,零依赖性,任何JavaScript环境的可扩展日志库. 在Node.js,浏览器,和边缘运行时间工作.

如何安装 @crowlog/logger?

在项目目录运行 npm install @crowlog/logger,或使用 pnpm add / yarn add / bun add。

@crowlog/logger 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@crowlog/logger 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@crowlog/logger 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@crowlog/logger 可以商用吗?

@crowlog/logger 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@crowlog/logger 的下载量有多少?

根据 npm 官方下载统计,@crowlog/logger 在 2026/10/11 – 2026/11/09 这 30 天内被下载 3,189 次,日均约 106 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@crowlog/logger 还在维护吗?

最新版本 2.2.2 发布于 2026/01/04(10 个月前);至今共发布 13 个版本,其中过去 12 个月发布了 4 个;首次发布于 2025/02/07。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。