aboutsummaryrefslogtreecommitdiff
path: root/lldb/tools/lldb-dap/src-ts/logging.ts
blob: 7f3bbef9b027f979b4537bab6b5d2cb236dcecf3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import * as path from "path";
import * as vscode from "vscode";

/**
 * Formats the given date as a string in the form "YYYYMMddTHHMMSS".
 *
 * @param date The date to format as a string.
 * @returns The formatted date.
 */
function formatDate(date: Date): string {
  const year = date.getFullYear().toString().padStart(4, "0");
  const month = (date.getMonth() + 1).toString().padStart(2, "0");
  const day = date.getDate().toString().padStart(2, "0");
  const hour = date.getHours().toString().padStart(2, "0");
  const minute = date.getMinutes().toString().padStart(2, "0");
  const seconds = date.getSeconds().toString().padStart(2, "0");
  return `${year}${month}${day}T${hour}${minute}${seconds}`;
}

export enum LogType {
  DEBUG_SESSION,
}

export class LogFilePathProvider {
  private logFolder: string = "";

  constructor(
    private context: vscode.ExtensionContext,
    private logger: vscode.LogOutputChannel,
  ) {
    this.updateLogFolder();
    context.subscriptions.push(
        vscode.workspace.onDidChangeConfiguration(e => {
            if (
                e.affectsConfiguration("lldb-dap.logFolder")
            ) {
                this.updateLogFolder();
            }
        })
    );
  }

  get(type: LogType): string {
    const logFolder = this.logFolder || this.context.logUri.fsPath;
    switch(type) {
    case LogType.DEBUG_SESSION:
        return path.join(logFolder, `lldb-dap-${formatDate(new Date())}-${vscode.env.sessionId.split("-")[0]}.log`);
        break;
    }
  }

  private updateLogFolder() {
    const config = vscode.workspace.getConfiguration("lldb-dap");
    let logFolder =
      config.get<string>("logFolder") || this.context.logUri.fsPath;
    vscode.workspace.fs
      .createDirectory(vscode.Uri.file(logFolder))
      .then(undefined, (error) => {
        this.logger.error(`Failed to create log folder ${logFolder}: ${error}`);
        logFolder = this.context.logUri.fsPath;
      })
      .then(() => {
        this.logFolder = logFolder;
        this.logger.info(`Persisting lldb-dap logs to ${logFolder}`);
      });
  }
}