@chax-at/log-sink

中文文档
2.0.2发布于 2025/08/29TypeScriptCommonJS近 30 天下载 3641

日志服务

中文使用文档
文档目录8 节
  1. 使用量
  2. 日志级别
  3. 标记、属性和时间戳
  4. 排水沟
  5. 控制台LogDrain
  6. 盖尔夫·洛格德莱恩
  7. 文件系统LogDrain
  8. 打开遥测LogDrain

日志链接

LogSink是一个简单的日志包,允许将日志发送到多个目的地. 这些目的地被称为"地道".

使用量

软件包提供了LogSink作为默认导出的一个单通实例:

import LogSink from '@chax-at/log-sink';

在使用 LogSink 实例前, 必须配置至少一个排出 :

LogSink.registerDrain(new ConsoleLogDrain(), {
    enabled: true,
    minLevel: LOGGING_CONSOLE_MINLEVEL,
    maxLevel: LOGGING_CONSOLE_MAXLEVEL,
});

单子实例可以导入到任何文件中并用于日志:

import LogSink from '@chax-at/log-sink';

LogSink.info('This is an info message');

日志级别

LogSink 只区分了四个日志级别 . 这比其他伐木解决方案要少,但是为了更清楚地说明何时使用每个关卡. 每个关卡的数值都符合syslog标准.

职等数字说明
错误3个发生了错误 。 将引发警报。 (取决于排水量)
警告页:1一个警告信息。 将不会触发警报,但可以在仪表板上看到.
资讯6个信息信息,可见于生产日志.
调试第7条调试消息,一般在生产环境中被过滤出.

在例外也用于非服务器出错的项目中,例如象征性过期的例外, 每种例外情况都应与适当的错误级别相挂钩。 也就是说,

  • token expired 将会是调试消息
  • validation failed 这将是一个警告信息
  • PDF generation failed 将是一个错误消息
LogSink.error('This is an error message');
LogSink.warning('This is a warning message');
LogSink.info('This is an info message');
LogSink.debug('This is a debug message');           // Level 7

标记、属性和时间戳

除了一个消息外,这些方法中的每一个都采用可选标记,属性对象和时间戳:

enum LogTags {
    Database = 'database',
}

LogSink.info('This is an info message', LogTags.Database, {attr1: 'value1', attr2: 'value2'}, new Date());

如果在编译时未知日志级别,则 log 可使用下列方法:

LogSink.log(LogLevel.Info, 'This is an info message');

如果需要,您可以创建额外的 LogSink 实例 :

import {LogSink} from '@chax-at/log-sink';

const logSink = new LogSink();

排水沟

该套装提供了两个内置排水道: ConsoleLogDrain 财务报告和审定财务报表 GelfLogDrain。 。 。 . 通过执行《公约》可增加新的排水量 ILogDrain 接口.

排水管使用 registerDrain 方法. 使用 minLevel 财务报告和审定财务报表 maxLevel,在每条排水管上,可以过滤出重度水平. 此外,可以使用该图过滤日志 filter 方法并使用 transform 方法.

LogSink.registerDrain(new ConsoleLogDrain(), {
    enabled: true,
    minLevel: LOGGING_CONSOLE_MINLEVEL,
    maxLevel: LOGGING_CONSOLE_MAXLEVEL,
    filter: (options: LogOptions) => {
        return options.tag === LogTags.Database;
    },
    transform: (options: LogOptions) => {
        return {
            ...options,
            message: options.message.toUpperCase(),
        };
    },
});

控制台LogDrain

这个 ConsoleLogDrain 日志信件到控制台。 可以被配置为日志属性并使用颜色.

new ConsoleLogDrain({logAttributes: true, useColor: true});

盖尔夫·洛格德莱恩

这个 GelfLogDrain 将信件日志到任何 GELF 功能服务器, 如 Graylog . 用这个 @chax-at/gelf-客户端 在引擎盖下.

new GelfLogDrain(new SecureTCPTransport({
    host: GELF_HOST,
    port: GELF_PORT,
    ca: GELF_SERVER_CA_CERT, // CA certificate string or buffer
    cert: GELF_CLIENT_CERT,  // Client certificate string or buffer
    key: GELF_CLIENT_KEY,    // CLient key string or buffer
}));

new GelfLogDrain(new TCPTransport({
    host: GELF_HOST,
    port: GELF_PORT,
}));

new GelfLogDrain(new UDPTransport({
    host: GELF_HOST,
    port: GELF_PORT,
    timeout: GELF_TIMEOUT,   // optional timeout (default 1000ms)
    protocol: GELF_PROTOCOL, // udp4 (default) or udp6
}));

文件系统LogDrain

这个 FilesystemLogDrain 将信件日志到文件系统中的文件.

new FilesystemLogDrain({
    fileName? : string; // optional filename (default log.txt)
    formatFunction? : LogFormatFunction; // optional formatting function for the logged message
    indentation? : number; // optional indentation for nested newlines (default 4)
    logAttributes? : boolean; // whether to log embedded attributes (default true)
    outDir: string; // the path of the directory the log file will be created
    separateWithEmptyLine? : boolean; // whether to add an additional newline after each log message to improve readability (default false)
});

打开遥测LogDrain

这个 OpenTelemetryLogDrain 通过 OpenTeleometry 日志消息.

首先,在您的工程中安装必要的软件包 :

npm i "@opentelemetry/sdk-node" "@opentelemetry/api" "@opentelemetry/sdk-logs" "@opentelemetry/exporter-logs-otlp-proto"

然后用如下方式使用

import {NodeSDK} from "@opentelemetry/sdk-node";
import {SimpleLogRecordProcessor} from "@opentelemetry/sdk-logs";
import {logs} from '@opentelemetry/api-logs';
import {OTLPLogExporter} from "@opentelemetry/exporter-logs-otlp-proto";

import LogSink, {LogLevel, OpenTelemetryLogDrain} from '@chax-at/log-sink';

const exporter = new OTLPLogExporter({
    //url: defaults to 'http://localhost:4318/v1/logs',
});

const sdk = new NodeSDK({
    logRecordProcessor: new SimpleLogRecordProcessor(exporter),
});
sdk.start();

const logger = logs.getLoggerProvider().getLogger("default");
LogSink.registerDrain(new OpenTelemetryLogDrain(logger), {
    enabled: true,
    minLevel: LogLevel.Error,
    maxLevel: LogLevel.Debug
});

LogSink.info("This is a log");

更多信息可在 打开远程信息 或正式的开远文件.

版本与发布记录

@chax-at/log-sink 共发布 10 个版本,首次发布于 2022/02/10;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.0.2latest2025/08/291.2 年前
2.0.12025/05/081.5 年前
2.0.0-alpha.1next2025/05/081.5 年前
2.0.02024/06/112 年前
1.1.02024/05/172 年前
1.0.02023/10/233 年前

关于 @chax-at/log-sink 的常见问题

@chax-at/log-sink 是什么?

日志服务

如何安装 @chax-at/log-sink?

在项目目录运行 npm install @chax-at/log-sink,或使用 pnpm add / yarn add / bun add。

@chax-at/log-sink 支持 TypeScript 吗?

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

@chax-at/log-sink 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@chax-at/log-sink 可以商用吗?

@chax-at/log-sink 使用 未声明 许可。package.json 没有声明许可证。没有许可证的代码默认保留全部权利,商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括,不构成法律意见,请以许可原文为准。

@chax-at/log-sink 的下载量有多少?

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

@chax-at/log-sink 还在维护吗?

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