Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/log/common/bufferLog.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { MutableDisposable } from '../../../base/common/lifecycle.js';
7
import { AbstractMessageLogger, DEFAULT_LOG_LEVEL, ILogger, log, LogLevel } from './log.js';
8
9
interface ILog {
10
level: LogLevel;
11
message: string;
12
}
13
14
export class BufferLogger extends AbstractMessageLogger {
15
16
declare readonly _serviceBrand: undefined;
17
private buffer: ILog[] = [];
18
private _logger: ILogger | undefined = undefined;
19
private readonly _logLevelDisposable = this._register(new MutableDisposable());
20
21
constructor(logLevel: LogLevel = DEFAULT_LOG_LEVEL) {
22
super();
23
this.setLevel(logLevel);
24
}
25
26
set logger(logger: ILogger) {
27
this._logger = logger;
28
this.setLevel(logger.getLevel());
29
this._logLevelDisposable.value = logger.onDidChangeLogLevel(this.setLevel, this);
30
31
for (const { level, message } of this.buffer) {
32
log(logger, level, message);
33
}
34
35
this.buffer = [];
36
}
37
38
protected log(level: LogLevel, message: string): void {
39
if (this._logger) {
40
log(this._logger, level, message);
41
} else if (this.getLevel() <= level) {
42
this.buffer.push({ level, message });
43
}
44
}
45
46
override dispose(): void {
47
this._logger?.dispose();
48
super.dispose();
49
}
50
51
override flush(): void {
52
this._logger?.flush();
53
}
54
}
55
56