144 getCorrectPrefix(info:
boolean, warning:
boolean, error:
boolean, debug:
boolean):
string {
147 }
else if (warning) {
186 let date: Date = new Date();
187 let finalString:
string =
"[";
188 finalString += date.getDate() +
"-";
189 finalString += (date.getMonth() + 1) +
"-";
190 finalString += date.getFullYear() +
" ";
191 finalString += date.getHours() +
":";
192 finalString += date.getMinutes() +
":";
193 finalString += date.getSeconds() +
".";
194 finalString += date.getMilliseconds();
234 getParentCaller(searchDepth: number = 2):
string | undefined {
235 const stack = new Error().stack;
240 const lines = stack.split(
"\n").map(line => line.trim());
243 if (lines.length > searchDepth) {
244 const match = lines[searchDepth].match(/at (\w+)/);
276 debugEnabled(): boolean {
311 checkIfExtensionInstalled(context:
vscode.ExtensionContext | undefined): boolean {
312 if (context === undefined) {
313 return process.env.VSCODE_DEBUG_MODE?.toLocaleLowerCase() ===
'true';
315 if (context.extensionMode ===
vscode.ExtensionMode.Development) {
316 console.log(
"Running in debug/development mode");
318 }
else if (context.extensionMode ===
vscode.ExtensionMode.Test) {
319 console.log(
"Running in test mode");
322 console.log(
"Running in production (installed) mode");
327 packageForUnsafe(message:
string, info:
boolean, warning:
boolean, error:
boolean, debug:
boolean):
string {
328 const datetime:
string = this.getDatetime();
329 const correctPrefix:
string = this.getCorrectPrefix(info, warning, error, debug);
330 return `${datetime} ${
moduleName}:initialising ${correctPrefix}
'${message}'`;
376 private fullyLoaded:
boolean =
false;
387 this.LI = loggerInternals;
388 this.fullyLoaded = fullyLoaded;
409 updateLoadStatus(fullyLoaded:
boolean =
true): void {
410 this.fullyLoaded = fullyLoaded;
422 info<T extends string>(message:
string, ...items: T[]): Thenable<T | undefined> {
423 if (!this.fullyLoaded) {
424 console.log(this.LI.packageForUnsafe(message,
true,
false,
false,
false));
425 return Promise.resolve(undefined);
427 let
final:
string =
"";
428 final +=
CodeConfig.get(
"extensionName") +
" ";
429 final += this.LI.getCorrectPrefix(
true,
false,
false,
false);
430 final +=
" '" + message +
"'";
431 return vscode.window.showInformationMessage<T>(message, ...items);
444 warning<T extends string>(message:
string, ...items: T[]): Thenable<T | undefined> {
445 if (!this.fullyLoaded) {
446 console.warn(this.LI.packageForUnsafe(message,
false,
true,
false,
false));
447 return Promise.resolve(undefined);
449 let
final:
string =
"";
450 final += this.LI.getDatetime() +
" ";
451 final +=
CodeConfig.get(
"extensionName") +
" ";
452 final += this.LI.getCorrectPrefix(
false,
true,
false,
false);
453 final +=
" '" + message +
"'";
454 return vscode.window.showWarningMessage<T>(message, ...items);
467 error<T extends string>(message:
string, ...items: T[]): Thenable<T | undefined> {
468 if (!this.fullyLoaded) {
469 console.error(this.LI.packageForUnsafe(message,
false,
false,
true,
false));
470 return Promise.resolve(undefined);
472 let
final:
string =
"";
473 final += this.LI.getDatetime() +
" ";
474 final +=
CodeConfig.get(
"extensionName") +
" ";
475 final += this.LI.getCorrectPrefix(
false,
false,
true,
false);
476 final +=
" '" + message +
"'";
477 return vscode.window.showErrorMessage<T>(message, ...items);
491 debug<T extends string>(message:
string, ...items: T[]): Thenable<T | undefined> {
492 if (!this.fullyLoaded) {
493 return Promise.resolve(undefined);
495 if (!this.LI.debugEnabled()) {
496 console.log(this.LI.packageForUnsafe(message,
false,
false,
false,
true));
497 return Promise.resolve(undefined);
499 let
final:
string =
"";
500 final += this.LI.getDatetime() +
" ";
501 final +=
CodeConfig.get(
"extensionName") +
" ";
502 final += this.LI.getCorrectPrefix(
false,
false,
false,
true);
503 final +=
" '" + message +
"'";
504 return vscode.window.showInformationMessage<T>(
final, ...items);
constructor(context:vscode.ExtensionContext|undefined=undefined, fullyLoaded:boolean=false)
Initializes the logging system with environment detection and auto-display.