Skip to main content
Glama
logging-utils.d.ts7.96 kB
import { EventEmitter } from 'node:events'; /** * This module defines an ad-hoc debug logger for Google Cloud Platform * client libraries in Node. An ad-hoc debug logger is a tool which lets * users use an external, unified interface (in this case, environment * variables) to determine what logging they want to see at runtime. This * isn't necessarily fed into the console, but is meant to be under the * control of the user. The kind of logging that will be produced by this * is more like "call retry happened", not "event you'd want to record * in Cloud Logger". * * More for Googlers implementing libraries with it: * go/cloud-client-logging-design */ /** * Possible log levels. These are a subset of Cloud Observability levels. * https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry#LogSeverity */ export declare enum LogSeverity { DEFAULT = "DEFAULT", DEBUG = "DEBUG", INFO = "INFO", WARNING = "WARNING", ERROR = "ERROR" } /** * A set of suggested log metadata fields. */ export interface LogFields { /** * Log level - undefined/null === DEFAULT. */ severity?: LogSeverity; /** * If this log is associated with an OpenTelemetry trace, you can put the * trace ID here to pass on that association. */ telemetryTraceId?: string; /** * If this log is associated with an OpenTelemetry trace, you can put the * span ID here to pass on that association. */ telemetrySpanId?: string; /** * This is a catch-all for any other items you might want to go into * structured logs. Library implementers, please see the spec docs above * for the items envisioned to go here. */ other?: unknown; } /** * Adds typings for event sinks. */ export declare interface AdhocDebugLogger { on(event: 'log', listener: (fields: LogFields, args: unknown[]) => void): this; on(event: string, listener: Function): this; } /** * Our logger instance. This actually contains the meat of dealing * with log lines, including EventEmitter. This contains the function * that will be passed back to users of the package. */ export declare class AdhocDebugLogger extends EventEmitter { namespace: string; upstream: AdhocDebugLogCallable; func: AdhocDebugLogFunction; /** * @param upstream The backend will pass a function that will be * called whenever our logger function is invoked. */ constructor(namespace: string, upstream: AdhocDebugLogCallable); invoke(fields: LogFields, ...args: unknown[]): void; invokeSeverity(severity: LogSeverity, ...args: unknown[]): void; } /** * This can be used in place of a real logger while waiting for Promises or disabling logging. */ export declare const placeholder: AdhocDebugLogFunction; /** * When the user receives a log function (below), this will be the basic function * call interface for it. */ export interface AdhocDebugLogCallable { (fields: LogFields, ...args: unknown[]): void; } /** * Adds typing info for the EventEmitter we're adding to the returned function. * * Note that this interface may change at any time, as we're reserving the * right to add new backends at the logger level. * * @private * @internal */ export interface AdhocDebugLogFunction extends AdhocDebugLogCallable { instance: AdhocDebugLogger; on(event: 'log', listener: (fields: LogFields, args: unknown[]) => void): this; debug(...args: unknown[]): void; info(...args: unknown[]): void; warn(...args: unknown[]): void; error(...args: unknown[]): void; sublog(namespace: string): AdhocDebugLogFunction; } /** * One of these can be passed to support a third-party backend, like "debug". * We're splitting this out because ESM can complicate optional module loading. * * Note that this interface may change at any time, as we're reserving the * right to add new backends at the logger level. * * @private * @internal */ export interface DebugLogBackend { /** * Outputs a log to this backend. * * @param namespace The "system" that will be used for filtering. This may also * include a "subsystem" in the form "system:subsystem". * @param fields Logging fields to be included as metadata. * @param args Any parameters to passed to a utils.format() type formatter. */ log(namespace: string, fields: LogFields, ...args: unknown[]): void; /** * Passes in the system/subsystem filters from the global environment variables. * This lets the backend merge with any native ones. * * @param filters A list of wildcards matching systems or system:subsystem pairs. */ setFilters(filters: string[]): void; } /** * The base class for debug logging backends. It's possible to use this, but the * same non-guarantees above still apply (unstable interface, etc). * * @private * @internal */ export declare abstract class DebugLogBackendBase implements DebugLogBackend { cached: Map<string, AdhocDebugLogCallable>; filters: string[]; filtersSet: boolean; constructor(); /** * Creates a callback function that we can call to send log lines out. * * @param namespace The system/subsystem namespace. */ abstract makeLogger(namespace: string): AdhocDebugLogCallable; /** * Provides a callback for the subclass to hook if it needs to do something * specific with `this.filters`. */ abstract setFilters(): void; log(namespace: string, fields: LogFields, ...args: unknown[]): void; } /** * @returns A backend based on Node util.debuglog; this is the default. */ export declare function getNodeBackend(): DebugLogBackend; type DebugPackage = any; /** * Creates a "debug" package backend. The user must call require('debug') and pass * the resulting object to this function. * * ``` * setBackend(getDebugBackend(require('debug'))) * ``` * * https://www.npmjs.com/package/debug * * Note: Google does not explicitly endorse or recommend this package; it's just * being provided as an option. * * @returns A backend based on the npm "debug" package. */ export declare function getDebugBackend(debugPkg: DebugPackage): DebugLogBackend; /** * Creates a "structured logging" backend. This pretty much works like the * Node logger, but it outputs structured logging JSON matching Google * Cloud's ingestion specs instead of plain text. * * ``` * setBackend(getStructuredBackend()) * ``` * * @param upstream If you want to use something besides the Node backend to * write the actual log lines into, pass that here. * @returns A backend based on Google Cloud structured logging. */ export declare function getStructuredBackend(upstream?: DebugLogBackend): DebugLogBackend; /** * The environment variables that we standardized on, for all ad-hoc logging. */ export declare const env: { /** * Filter wildcards specific to the Node syntax, and similar to the built-in * utils.debuglog() environment variable. If missing, disables logging. */ nodeEnables: string; }; /** * Set the backend to use for our log output. * - A backend object * - null to disable logging * - undefined for "nothing yet", defaults to the Node backend * * @param backend Results from one of the get*Backend() functions. */ export declare function setBackend(backend: DebugLogBackend | null): void; /** * Creates a logging function. Multiple calls to this with the same namespace * will produce the same logger, with the same event emitter hooks. * * Namespaces can be a simple string ("system" name), or a qualified string * (system:subsystem), which can be used for filtering, or for "system:*". * * @param namespace The namespace, a descriptive text string. * @returns A function you can call that works similar to console.log(). */ export declare function log(namespace: string, parent?: AdhocDebugLogFunction): AdhocDebugLogFunction; export {};

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/guangxiangdebizi/email-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server