From e987d375f600ea91d338bc015d123339ca282394 Mon Sep 17 00:00:00 2001 From: David Kincaid Date: Sat, 28 Oct 2023 19:36:46 -0400 Subject: [PATCH] Upgraded logger utility --- src/logger.ts | 93 +++++++++++++++++++------------ src/lsp/GDScriptLanguageClient.ts | 4 +- 2 files changed, 60 insertions(+), 37 deletions(-) diff --git a/src/logger.ts b/src/logger.ts index 25bfe6dd4..0db10f421 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -44,62 +44,85 @@ export class Logger { } } -export class Logger2 { - protected tag: string = ""; - protected level: string = ""; - protected time: boolean = false; +export enum LOG_LEVEL { + SILENT, + ERROR, + WARNING, + INFO, + DEBUG, +} - constructor(tag: string) { - this.tag = tag; +const LOG_LEVEL_NAMES = [ + "SILENT", + "ERROR", + "WARN ", + "INFO ", + "DEBUG", +] + +const RESET = "\u001b[0m" + +const LOG_COLORS = [ + RESET, // SILENT, normal + "\u001b[1;31m", // ERROR, red + "\u001b[1;33m", // WARNING, yellow + "\u001b[1;36m", // INFO, cyan + "\u001b[1;32m", // DEBUG, green +] + +export class Logger2 { + private time: boolean; + private label: boolean; + + constructor( + private tag: string, + private level: LOG_LEVEL = LOG_LEVEL.DEBUG, + { time = false, label = false }: { time?: boolean, label?: boolean } = {}, + ) { + this.time = time; + this.label = label; } - log(...messages) { - let line = "[godotTools]"; + private log(level: LOG_LEVEL, ...messages) { + let prefix = ""; + if (this.label) { + prefix += "[godotTools]"; + } if (this.time) { - line += `[${new Date().toISOString()}]`; + prefix += `[${new Date().toISOString()}]`; } - if (this.level) { - line += `[${this.level}]`; - this.level = ""; + if (level) { + prefix += "[" + LOG_COLORS[level] + LOG_LEVEL_NAMES[level] + RESET + "]"; } if (this.tag) { - line += `[${this.tag}]`; - } - if (line) { - line += " "; - } - - for (let index = 0; index < messages.length; index++) { - line += messages[index]; - if (index < messages.length) { - line += " "; - } else { - line += "\n"; - } + prefix += `[${this.tag}]`; } - console.log(line); + console.log(prefix, ...messages); } info(...messages) { - this.level = "INFO"; - this.log(messages); + if (LOG_LEVEL.INFO <= this.level) { + this.log(LOG_LEVEL.INFO, ...messages); + } } debug(...messages) { - this.level = "DEBUG"; - this.log(messages); + if (LOG_LEVEL.DEBUG <= this.level) { + this.log(LOG_LEVEL.DEBUG, ...messages); + } } warn(...messages) { - this.level = "WARNING"; - this.log(messages); + if (LOG_LEVEL.WARNING <= this.level) { + this.log(LOG_LEVEL.WARNING, ...messages); + } } error(...messages) { - this.level = "ERROR"; - this.log(messages); + if (LOG_LEVEL.ERROR <= this.level) { + this.log(LOG_LEVEL.ERROR, ...messages); + } } } - export function createLogger(tag) { return new Logger2(tag); } diff --git a/src/lsp/GDScriptLanguageClient.ts b/src/lsp/GDScriptLanguageClient.ts index 15e8c47f1..cc5e38ef0 100644 --- a/src/lsp/GDScriptLanguageClient.ts +++ b/src/lsp/GDScriptLanguageClient.ts @@ -120,7 +120,7 @@ export default class GDScriptLanguageClient extends LanguageClient { } private on_send_message(message: RequestMessage) { - log.debug("tx: " + JSON.stringify(message)); + log.debug("tx:", message); this.sentMessages.set(message.id, message.method); @@ -131,7 +131,7 @@ export default class GDScriptLanguageClient extends LanguageClient { private on_message(message: ResponseMessage) { const msgString = JSON.stringify(message); - log.debug("rx: " + msgString); + log.debug("rx:", message); // This is a dirty hack to fix the language server sending us // invalid file URIs