mirror of
https://github.com/coder/code-server.git
synced 2026-06-11 12:37:10 +02:00
Merge commit 'be3e8236086165e5e45a5a10783823874b3f3ebd' as 'lib/vscode'
This commit is contained in:
96
lib/vscode/src/vs/platform/log/common/bufferLog.ts
Normal file
96
lib/vscode/src/vs/platform/log/common/bufferLog.ts
Normal file
@@ -0,0 +1,96 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { ILogService, LogLevel, AbstractLogService, DEFAULT_LOG_LEVEL } from 'vs/platform/log/common/log';
|
||||
|
||||
interface ILog {
|
||||
level: LogLevel;
|
||||
args: any[];
|
||||
}
|
||||
|
||||
function getLogFunction(logger: ILogService, level: LogLevel): Function {
|
||||
switch (level) {
|
||||
case LogLevel.Trace: return logger.trace;
|
||||
case LogLevel.Debug: return logger.debug;
|
||||
case LogLevel.Info: return logger.info;
|
||||
case LogLevel.Warning: return logger.warn;
|
||||
case LogLevel.Error: return logger.error;
|
||||
case LogLevel.Critical: return logger.critical;
|
||||
default: throw new Error('Invalid log level');
|
||||
}
|
||||
}
|
||||
|
||||
export class BufferLogService extends AbstractLogService implements ILogService {
|
||||
|
||||
declare readonly _serviceBrand: undefined;
|
||||
private buffer: ILog[] = [];
|
||||
private _logger: ILogService | undefined = undefined;
|
||||
|
||||
constructor(logLevel: LogLevel = DEFAULT_LOG_LEVEL) {
|
||||
super();
|
||||
this.setLevel(logLevel);
|
||||
this._register(this.onDidChangeLogLevel(level => {
|
||||
if (this._logger) {
|
||||
this._logger.setLevel(level);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
set logger(logger: ILogService) {
|
||||
this._logger = logger;
|
||||
|
||||
for (const { level, args } of this.buffer) {
|
||||
const fn = getLogFunction(logger, level);
|
||||
fn.apply(logger, args);
|
||||
}
|
||||
|
||||
this.buffer = [];
|
||||
}
|
||||
|
||||
private _log(level: LogLevel, ...args: any[]): void {
|
||||
if (this._logger) {
|
||||
const fn = getLogFunction(this._logger, level);
|
||||
fn.apply(this._logger, args);
|
||||
} else if (this.getLevel() <= level) {
|
||||
this.buffer.push({ level, args });
|
||||
}
|
||||
}
|
||||
|
||||
trace(message: string, ...args: any[]): void {
|
||||
this._log(LogLevel.Trace, message, ...args);
|
||||
}
|
||||
|
||||
debug(message: string, ...args: any[]): void {
|
||||
this._log(LogLevel.Debug, message, ...args);
|
||||
}
|
||||
|
||||
info(message: string, ...args: any[]): void {
|
||||
this._log(LogLevel.Info, message, ...args);
|
||||
}
|
||||
|
||||
warn(message: string, ...args: any[]): void {
|
||||
this._log(LogLevel.Warning, message, ...args);
|
||||
}
|
||||
|
||||
error(message: string | Error, ...args: any[]): void {
|
||||
this._log(LogLevel.Error, message, ...args);
|
||||
}
|
||||
|
||||
critical(message: string | Error, ...args: any[]): void {
|
||||
this._log(LogLevel.Critical, message, ...args);
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
if (this._logger) {
|
||||
this._logger.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
flush(): void {
|
||||
if (this._logger) {
|
||||
this._logger.flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user