Skip to content

Commit ec9884a

Browse files
Correctly generate logfile on windows (#256)
1 parent f803819 commit ec9884a

File tree

2 files changed

+55
-6
lines changed

2 files changed

+55
-6
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import "@databricks/databricks-sdk/dist";
2+
import {Time, TimeUnits} from "@databricks/databricks-sdk/dist";
3+
import {NamedLogger} from "@databricks/databricks-sdk/dist/logging";
4+
import assert from "assert";
5+
import {mkdtemp, readFile} from "fs/promises";
6+
import {remove} from "fs-extra";
7+
import {tmpdir} from "os";
8+
import path from "path";
9+
import {instance, mock, when} from "ts-mockito";
10+
import {ExtensionContext, Uri} from "vscode";
11+
import {LoggerManager, Loggers} from "./LoggerManager";
12+
13+
describe(__filename, function () {
14+
let tempDir: string;
15+
16+
this.timeout(new Time(5, TimeUnits.seconds).toMillSeconds().value);
17+
18+
beforeEach(async () => {
19+
tempDir = await mkdtemp(path.join(tmpdir(), "testdir-"));
20+
});
21+
22+
it("should create log file and log data", async () => {
23+
const mockContext = mock<ExtensionContext>();
24+
when(mockContext.logUri).thenReturn(Uri.file(tempDir));
25+
26+
const manager = new LoggerManager(instance(mockContext));
27+
await manager.initLoggers();
28+
NamedLogger.getOrCreate(Loggers.Extension).debug("test message");
29+
30+
await new Promise((resolve) =>
31+
setTimeout(
32+
resolve,
33+
new Time(0.5, TimeUnits.seconds).toMillSeconds().value
34+
)
35+
);
36+
37+
const rawLogs = await readFile(path.join(tempDir, "logs.json"), {
38+
encoding: "utf-8",
39+
});
40+
41+
const logs = rawLogs.split("\n");
42+
assert.ok(logs.length !== 0);
43+
assert.ok(logs[0].includes("test message"));
44+
});
45+
46+
afterEach(async () => {
47+
await new Promise((resolve) => remove(tempDir, resolve));
48+
});
49+
});

packages/databricks-vscode/src/logger/LoggerManager.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import {
55
import {env, ExtensionContext, window} from "vscode";
66
import {loggers, format, transports} from "winston";
77
import {getOutputConsoleTransport} from "./outputConsoleTransport";
8-
import {unlink, access} from "fs/promises";
8+
import {unlink, access, mkdir} from "fs/promises";
9+
import path from "path";
910

1011
export class LoggerManager {
1112
constructor(readonly context: ExtensionContext) {}
@@ -26,7 +27,8 @@ export class LoggerManager {
2627

2728
async initLoggers() {
2829
const outputChannel = window.createOutputChannel("Databricks Logs");
29-
const logFile = `${this.context.logUri.path}/logs.json`;
30+
await mkdir(this.context.logUri.fsPath, {recursive: true});
31+
const logFile = path.join(this.context.logUri.fsPath, "logs.json");
3032
try {
3133
await access(logFile);
3234
await unlink(logFile);
@@ -39,12 +41,11 @@ export class LoggerManager {
3941
{
4042
factory: (name) => {
4143
return loggers.add(name, {
42-
level: "debug",
4344
transports: [
4445
getOutputConsoleTransport(outputChannel, {
4546
level: "debug",
4647
}),
47-
this.getFileTransport(logFile, {level: "all"}),
48+
this.getFileTransport(logFile, {level: "debug"}),
4849
],
4950
});
5051
},
@@ -60,12 +61,11 @@ export class LoggerManager {
6061
{
6162
factory: (name) => {
6263
return loggers.add(name, {
63-
level: "error",
6464
transports: [
6565
getOutputConsoleTransport(outputChannel, {
6666
level: "error",
6767
}),
68-
this.getFileTransport(logFile, {level: "all"}),
68+
this.getFileTransport(logFile, {level: "debug"}),
6969
],
7070
});
7171
},

0 commit comments

Comments
 (0)