Skip to content

Commit b39b8d4

Browse files
authored
fix: Don't fail to start when removing old log directory fails (#30216)
1 parent 01304cf commit b39b8d4

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

lib/util/logger.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,11 @@ class Logger {
240240

241241
for (const dir of directories) {
242242
this.debug(`Removing old log directory '${dir.path}'`);
243-
rimrafSync(dir.path);
243+
try {
244+
rimrafSync(dir.path);
245+
} catch (e) {
246+
this.error(`Failed to remove old log directory '${dir.path}': ${e}`);
247+
}
244248
}
245249
}
246250
}

test/logger.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ import Transport from "winston-transport";
1212
import logger from "../lib/util/logger";
1313
import * as settings from "../lib/util/settings";
1414

15+
vi.mock("rimraf", async (importOriginal) => {
16+
const actual = await importOriginal<typeof import("rimraf")>();
17+
return {
18+
...actual,
19+
rimrafSync: vi.fn(actual.rimrafSync),
20+
};
21+
});
22+
1523
describe("Logger", () => {
1624
let consoleWriteSpy: MockInstance;
1725
const dir = tmp.dirSync();
@@ -59,6 +67,24 @@ describe("Logger", () => {
5967
expect(fs.readdirSync(dir.name).length).toBe(10);
6068
});
6169

70+
it("Should handle cleanup error", () => {
71+
for (const d of fs.readdirSync(dir.name)) {
72+
rimrafSync(path.join(dir.name, d));
73+
}
74+
75+
for (let i = 0; i < 20; i++) {
76+
fs.mkdirSync(path.join(dir.name, `log_${i}`));
77+
}
78+
79+
vi.mocked(rimrafSync).mockImplementationOnce(() => {
80+
throw new Error("EACCES: permission denied");
81+
});
82+
83+
const errorSpy = vi.spyOn(logger, "error");
84+
logger.init();
85+
expect(errorSpy).toHaveBeenCalledWith(expect.stringMatching(/Failed to remove old log directory '.*': Error: EACCES: permission denied/));
86+
});
87+
6288
it("Should cleanup (15 folders setting)", () => {
6389
for (const d of fs.readdirSync(dir.name)) {
6490
rimrafSync(path.join(dir.name, d));

0 commit comments

Comments
 (0)