更好地支持 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