Path: blob/main/src/vs/platform/log/common/bufferLog.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { MutableDisposable } from '../../../base/common/lifecycle.js';6import { AbstractMessageLogger, DEFAULT_LOG_LEVEL, ILogger, log, LogLevel } from './log.js';78interface ILog {9level: LogLevel;10message: string;11}1213export class BufferLogger extends AbstractMessageLogger {1415declare readonly _serviceBrand: undefined;16private buffer: ILog[] = [];17private _logger: ILogger | undefined = undefined;18private readonly _logLevelDisposable = this._register(new MutableDisposable());1920constructor(logLevel: LogLevel = DEFAULT_LOG_LEVEL) {21super();22this.setLevel(logLevel);23}2425set logger(logger: ILogger) {26this._logger = logger;27this.setLevel(logger.getLevel());28this._logLevelDisposable.value = logger.onDidChangeLogLevel(this.setLevel, this);2930for (const { level, message } of this.buffer) {31log(logger, level, message);32}3334this.buffer = [];35}3637protected log(level: LogLevel, message: string): void {38if (this._logger) {39log(this._logger, level, message);40} else if (this.getLevel() <= level) {41this.buffer.push({ level, message });42}43}4445override dispose(): void {46this._logger?.dispose();47super.dispose();48}4950override flush(): void {51this._logger?.flush();52}53}545556