Path: blob/main/extensions/copilot/test/simulationLogger.ts
13383 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*--------------------------------------------------------------------------------------------*/4import * as chalk from 'chalk';5import { LogLevel } from '../src/platform/log/common/logService';678class SimulationLogger {9public logLevel: LogLevel;10private tagPrefix: string;1112constructor(private logFn: (...args: any[]) => void, logLevel: LogLevel = LogLevel.Info, tagPrefix: string = '') {13this.logLevel = logLevel;14this.tagPrefix = tagPrefix;15}1617setLogLevel(level: LogLevel): void {18this.logLevel = level;19}2021trace(...args: any[]): void {22if (this.shouldLog(LogLevel.Trace)) {23this.logFn(this.formatMessage(LogLevel.Trace, ...args));24}25}2627debug(...args: any[]): void {28if (this.shouldLog(LogLevel.Debug)) {29this.logFn(this.formatMessage(LogLevel.Debug, ...args));30}31}3233info(...args: any[]): void {34if (this.shouldLog(LogLevel.Info)) {35this.logFn(this.formatMessage(LogLevel.Info, ...args));36}37}3839warn(...args: any[]): void {40if (this.shouldLog(LogLevel.Warning)) {41this.logFn(this.formatMessage(LogLevel.Warning, ...args));42}43}4445error(...args: any[]): void {46if (this.shouldLog(LogLevel.Error)) {47this.logFn(this.formatMessage(LogLevel.Error, ...args));48}49}5051tag(tag: string): SimulationLogger {52return new SimulationLogger(this.logFn, this.logLevel, `${this.tagPrefix}[${tag}] `);53}5455shouldLog(level: LogLevel): boolean {56const levels: LogLevel[] = [LogLevel.Debug, LogLevel.Info, LogLevel.Warning, LogLevel.Error];57return levels.indexOf(level) >= levels.indexOf(this.logLevel);58}5960private formatMessage(level: LogLevel, ...args: any[]): string {61const levelColors: Record<LogLevel, string> = {62[LogLevel.Off]: chalk.white('off'),63[LogLevel.Trace]: chalk.gray('trace'),64[LogLevel.Debug]: chalk.blue('debug'),65[LogLevel.Info]: chalk.green('info '),66[LogLevel.Warning]: chalk.yellow('yellow'),67[LogLevel.Error]: chalk.red('error')68};69return `${chalk.bold(levelColors[level])} ${this.tagPrefix}${args.join(' ')}`;70}71}7273export const logger = new SimulationLogger((...args) => console.log(...args));747576