更好地支持 asyncLocalStorage(request context)

作者: deanbiltup创建于 2025年2月13日更新于 2025年2月13日

export class CustomLogger extends Logger {

constructor(
    private logger: Logger
) {
    super({
        name: "super-unused"
    });
}

addStream(stream: Logger.Stream): void {
    super.addStream(stream);
}
addSerializers(serializers: Logger.Serializers): void {
    throw new Error("unused");
}
child(options: Object, simple?: boolean): Logger {
    const child = this.logger.child(options, simple);
    const wrapper = new CustomLogger(child);
    return wrapper;
}

reopenFileStreams(): void {
    throw new Error("unused");
}

level(): number;
level(value: Logger.LogLevel): void;

// Single implementation
level(value?: Logger.LogLevel): number | void {
    if (value === undefined) {
        return this.level();
    } else {
        this.level(value);
    }
}
levels(): number[];
levels(name: number | string): number;
levels(name: number | string, value: Logger.LogLevel): void;

// Single implementation
levels(name?: number | string, value?: Logger.LogLevel): number[] | number | void {
    if (name === undefined) {
        return this.logger.levels();
    } else if (value === undefined) {
        return this.logger.levels(name);
    } else {
        this.logger.levels(name, value);
    }
}

// Helper method to create context private createContext(...args: any[]): { context: Object; restArgs: any[] } { const [firstArg, ...restArgs] = args; let context: Object;

    if (firstArg instanceof Error) {
        context = { err: {
                name: firstArg.name,
                message: firstArg.message,
                stack: firstArg.stack
            }
        };
    } else if (typeof firstArg === 'object' && firstArg !== null) {
        context = firstArg;
    } else {
        context = {};
        restArgs.unshift(firstArg);
    }

    let enrichedContext = context;

    const store = asyncLocalStorage.getStore();

    if (store) {
        const traceId =

内容来源: trentm/node-bunyan