Files
vscode/src/vs/platform/log/common/bufferLog.ts
T
Sandeep Somavarapu 05d59b893e Log: Enhancements and cleaup (#171325)
- Make logger service primary source for log level
- Automatically register output channels for loggers from anywhere
- Use logger channels on remote processes (server, pty)
- clean up loggers and log service
2023-01-14 19:46:46 +01:00

53 lines
1.4 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { AbstractMessageLogger, DEFAULT_LOG_LEVEL, ILogger, log, LogLevel } from 'vs/platform/log/common/log';
interface ILog {
level: LogLevel;
message: string;
}
export class BufferLogger extends AbstractMessageLogger {
declare readonly _serviceBrand: undefined;
private buffer: ILog[] = [];
private _logger: ILogger | undefined = undefined;
constructor(logLevel: LogLevel = DEFAULT_LOG_LEVEL) {
super();
this.setLevel(logLevel);
this._register(this.onDidChangeLogLevel(level => {
this._logger?.setLevel(level);
}));
}
set logger(logger: ILogger) {
this._logger = logger;
for (const { level, message } of this.buffer) {
log(logger, level, message);
}
this.buffer = [];
}
protected log(level: LogLevel, message: string): void {
if (this._logger) {
log(this._logger, level, message);
} else if (this.getLevel() <= level) {
this.buffer.push({ level, message });
}
}
override dispose(): void {
this._logger?.dispose();
}
override flush(): void {
this._logger?.flush();
}
}