68 lines · typescript
1import * as path from "path";2import * as vscode from "vscode";3 4/**5 * Formats the given date as a string in the form "YYYYMMddTHHMMSS".6 *7 * @param date The date to format as a string.8 * @returns The formatted date.9 */10function formatDate(date: Date): string {11 const year = date.getFullYear().toString().padStart(4, "0");12 const month = (date.getMonth() + 1).toString().padStart(2, "0");13 const day = date.getDate().toString().padStart(2, "0");14 const hour = date.getHours().toString().padStart(2, "0");15 const minute = date.getMinutes().toString().padStart(2, "0");16 const seconds = date.getSeconds().toString().padStart(2, "0");17 return `${year}${month}${day}T${hour}${minute}${seconds}`;18}19 20export enum LogType {21 DEBUG_SESSION,22}23 24export class LogFilePathProvider {25 private logFolder: string = "";26 27 constructor(28 private context: vscode.ExtensionContext,29 private logger: vscode.LogOutputChannel,30 ) {31 this.updateLogFolder();32 context.subscriptions.push(33 vscode.workspace.onDidChangeConfiguration(e => {34 if (35 e.affectsConfiguration("lldb-dap.logFolder")36 ) {37 this.updateLogFolder();38 }39 })40 );41 }42 43 get(type: LogType): string {44 const logFolder = this.logFolder || this.context.logUri.fsPath;45 switch(type) {46 case LogType.DEBUG_SESSION:47 return path.join(logFolder, `lldb-dap-${formatDate(new Date())}-${vscode.env.sessionId.split("-")[0]}.log`);48 break;49 }50 }51 52 private updateLogFolder() {53 const config = vscode.workspace.getConfiguration("lldb-dap");54 let logFolder =55 config.get<string>("logFolder") || this.context.logUri.fsPath;56 vscode.workspace.fs57 .createDirectory(vscode.Uri.file(logFolder))58 .then(undefined, (error) => {59 this.logger.error(`Failed to create log folder ${logFolder}: ${error}`);60 logFolder = this.context.logUri.fsPath;61 })62 .then(() => {63 this.logFolder = logFolder;64 this.logger.info(`Persisting lldb-dap logs to ${logFolder}`);65 });66 }67}68