From 0c83cfb0e82c200c6dae03b92032e5d77f0d85db Mon Sep 17 00:00:00 2001 From: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> Date: Wed, 21 Dec 2022 14:08:10 +0200 Subject: [PATCH] Close log files on unmount Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> --- packages/core/src/renderer/bootstrap.tsx | 11 ++++++++++- .../close-renderer-log-file.injectable.ts | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 packages/core/src/renderer/logger/close-renderer-log-file.injectable.ts diff --git a/packages/core/src/renderer/bootstrap.tsx b/packages/core/src/renderer/bootstrap.tsx index f509847c74..3fc23120a6 100644 --- a/packages/core/src/renderer/bootstrap.tsx +++ b/packages/core/src/renderer/bootstrap.tsx @@ -19,6 +19,7 @@ import { Router } from "react-router"; import historyInjectable from "./navigation/history.injectable"; import assert from "assert"; import startFrameInjectable from "./start-frame/start-frame.injectable"; +import closeRendererLogFileInjectable from "./logger/close-renderer-log-file.injectable"; export async function bootstrap(di: DiContainer) { const startFrame = di.inject(startFrameInjectable); @@ -54,7 +55,15 @@ export async function bootstrap(di: DiContainer) { } try { - await initializeApp(() => unmountComponentAtNode(rootElem)); + const unmount = () => { + const closeLogFile = di.inject(closeRendererLogFileInjectable); + + closeLogFile(); + + unmountComponentAtNode(rootElem); + }; + + await initializeApp(unmount); } catch (error) { console.error(`[BOOTSTRAP]: view initialization error: ${error}`, { origin: location.href, diff --git a/packages/core/src/renderer/logger/close-renderer-log-file.injectable.ts b/packages/core/src/renderer/logger/close-renderer-log-file.injectable.ts new file mode 100644 index 0000000000..b47e2572a8 --- /dev/null +++ b/packages/core/src/renderer/logger/close-renderer-log-file.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import rendererFileLoggerTransportInjectable from "./file-transport.injectable"; + +const closeRendererLogFileInjectable = getInjectable({ + id: "close-renderer-log-file", + instantiate: (di) => { + const fileLoggingTransport = di.inject(rendererFileLoggerTransportInjectable); + + return () => { + fileLoggingTransport.close?.(); + }; + }, +}); + +export default closeRendererLogFileInjectable;