Skip to content

插件 ​

用法请参阅 插件指南。本页说明其接口。插件可以实现以下钩子的任意子集。

ts
interface Plugin {
  readonly name: string;
  onInit?(ctx: PluginContext): void | Promise<void>;
  onEntry?(entry: LogEntry): LogEntry | null | Promise<LogEntry | null>;
  onTransport?(transport: Transport): void;
  onDestroy?(): void | Promise<void>;
}

在 onEntry 中返回 null 即可丢弃该条目。

PluginContext ​

在 onInit 中传入,是运行时重新配置的桥梁:

ts
interface PluginContext {
  addTransport(transport: Transport): void;
  removeTransport(name: string): void;
  pipeline: Pipeline;
  use(plugin: Plugin): Promise<void>;
  unregisterPlugin(name: string): void;
  logger: Logger;
}

PluginManager ​

logger 将注册与条目拦截委托给 PluginManager:

ts
class PluginManager {
  constructor(host: PluginContext);
  register(plugin: Plugin): Promise<void>;
  unregister(name: string): void; // 调用 onDestroy
  has(name: string): boolean;
  notifyTransport(transport: Transport): void;
  intercept(entry: LogEntry): Promise<LogEntry | null>;
  destroy(): Promise<void>;
}

条目会按注册顺序经过每个插件的 onEntry 钩子;异步钩子会被 await。插件拦截会被链式接入 logger 的写入队列,因此 logger.flush() / logger.destroy() 会等待其完成。

Released under the MIT License.