Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/test/simulationLogger.ts
13383 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
import * as chalk from 'chalk';
6
import { LogLevel } from '../src/platform/log/common/logService';
7
8
9
class SimulationLogger {
10
public logLevel: LogLevel;
11
private tagPrefix: string;
12
13
constructor(private logFn: (...args: any[]) => void, logLevel: LogLevel = LogLevel.Info, tagPrefix: string = '') {
14
this.logLevel = logLevel;
15
this.tagPrefix = tagPrefix;
16
}
17
18
setLogLevel(level: LogLevel): void {
19
this.logLevel = level;
20
}
21
22
trace(...args: any[]): void {
23
if (this.shouldLog(LogLevel.Trace)) {
24
this.logFn(this.formatMessage(LogLevel.Trace, ...args));
25
}
26
}
27
28
debug(...args: any[]): void {
29
if (this.shouldLog(LogLevel.Debug)) {
30
this.logFn(this.formatMessage(LogLevel.Debug, ...args));
31
}
32
}
33
34
info(...args: any[]): void {
35
if (this.shouldLog(LogLevel.Info)) {
36
this.logFn(this.formatMessage(LogLevel.Info, ...args));
37
}
38
}
39
40
warn(...args: any[]): void {
41
if (this.shouldLog(LogLevel.Warning)) {
42
this.logFn(this.formatMessage(LogLevel.Warning, ...args));
43
}
44
}
45
46
error(...args: any[]): void {
47
if (this.shouldLog(LogLevel.Error)) {
48
this.logFn(this.formatMessage(LogLevel.Error, ...args));
49
}
50
}
51
52
tag(tag: string): SimulationLogger {
53
return new SimulationLogger(this.logFn, this.logLevel, `${this.tagPrefix}[${tag}] `);
54
}
55
56
shouldLog(level: LogLevel): boolean {
57
const levels: LogLevel[] = [LogLevel.Debug, LogLevel.Info, LogLevel.Warning, LogLevel.Error];
58
return levels.indexOf(level) >= levels.indexOf(this.logLevel);
59
}
60
61
private formatMessage(level: LogLevel, ...args: any[]): string {
62
const levelColors: Record<LogLevel, string> = {
63
[LogLevel.Off]: chalk.white('off'),
64
[LogLevel.Trace]: chalk.gray('trace'),
65
[LogLevel.Debug]: chalk.blue('debug'),
66
[LogLevel.Info]: chalk.green('info '),
67
[LogLevel.Warning]: chalk.yellow('yellow'),
68
[LogLevel.Error]: chalk.red('error')
69
};
70
return `${chalk.bold(levelColors[level])} ${this.tagPrefix}${args.join(' ')}`;
71
}
72
}
73
74
export const logger = new SimulationLogger((...args) => console.log(...args));
75
76