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

见 漂亮的伐木指南 更多细节.
测试
使用内嵌运算在测试中捕获日志, 或新日志完全禁用日志 :
import { createNoopLogger } from '@crowlog/logger';
// No logs will be produced
const result = doSomething({ logger: createNoopLogger() });
见 测试指南 更多细节.
比较
| 图书馆 | 运行时间依赖关系 | 捆绑大小 |
|---|---|---|
| @crowlog/logger@ 1.0.0 | 0 依赖关系 | 1.3kB(674B 精密化+克齐普) 来源 |
| 皮诺@ 9.6.0 | 11个依赖关系 | 7.5kB (2.9kb 精密度+克齐普) 来源 |
| 温斯通@ 3.1.7 | 11个依赖关系 | 147.9kB(37.4kB 精密化+克齐普) 来源 |
| 包扬@1.8.15 | 19个依赖关系 | 15.7kB(5.6kB 变焦+克齐普) 来源 |
许可证
这个项目根据麻省理工学院的许可证获得许可。 见 自由主义 文档以获取更多信息.