-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Renderer file logging transport (#6795)
* Renderer file logging transport Add file logging to renderer, writing separate log files for renderer main frame and each cluster frame. Related to lensapp/support-lens-extension#118 Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> * Switch renderer file log level to info There is too much noise on debug level from api responses etc Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> * Unmount on pagehide instead of beforeunload It seems cluster onbeforeunload is not triggered when iframe is removed from dom by the parent (when disconnecting a cluster). While on root/main frame the beforeunload event does work, it seems to be adviced to use pagehide instead. Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> * Close log files on unmount Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> * Improve file handle closing in different situations This should cover reloading main and cluster frames and closing cluster frame throught disconnecting cluster. No file handles should be left open now. Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> * Fix renderer log rotation Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> * Switch back to beforeunload in root frame Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> * Remove capturing phase event usage Does not seem to be needed for log files to be successfully closed and caused integration tests to fail. Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> --------- Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com>
- Loading branch information
1 parent
c12561f
commit ac2d0e4
Showing
8 changed files
with
105 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
/** | ||
* 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 { createLogger, format } from "winston"; | ||
import { loggerTransportInjectionToken } from "./logger/transports"; | ||
|
||
const winstonLoggerInjectable = getInjectable({ | ||
id: "winston-logger", | ||
instantiate: (di) => createLogger({ | ||
format: format.combine( | ||
format.splat(), | ||
format.simple(), | ||
), | ||
transports: di.injectMany(loggerTransportInjectionToken), | ||
}), | ||
}); | ||
|
||
export default winstonLoggerInjectable; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
22 changes: 22 additions & 0 deletions
22
packages/core/src/renderer/logger/close-renderer-log-file.injectable.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
/** | ||
* 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 winstonLoggerInjectable from "../../common/winston-logger.injectable"; | ||
import rendererFileLoggerTransportInjectable from "./file-transport.injectable"; | ||
|
||
const closeRendererLogFileInjectable = getInjectable({ | ||
id: "close-renderer-log-file", | ||
instantiate: (di) => { | ||
const winstonLogger = di.inject(winstonLoggerInjectable); | ||
const fileLoggingTransport = di.inject(rendererFileLoggerTransportInjectable); | ||
|
||
return () => { | ||
fileLoggingTransport.close?.(); | ||
winstonLogger.remove(fileLoggingTransport); | ||
}; | ||
}, | ||
}); | ||
|
||
export default closeRendererLogFileInjectable; |
44 changes: 44 additions & 0 deletions
44
packages/core/src/renderer/logger/file-transport.injectable.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
/** | ||
* 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 { transports } from "winston"; | ||
import directoryForLogsInjectable from "../../common/app-paths/directory-for-logs.injectable"; | ||
import { loggerTransportInjectionToken } from "../../common/logger/transports"; | ||
import windowLocationInjectable from "../../common/k8s-api/window-location.injectable"; | ||
import currentlyInClusterFrameInjectable from "../routes/currently-in-cluster-frame.injectable"; | ||
import { getClusterIdFromHost } from "../utils"; | ||
|
||
const rendererFileLoggerTransportInjectable = getInjectable({ | ||
id: "renderer-file-logger-transport", | ||
instantiate: (di) => { | ||
let frameId: string; | ||
|
||
const currentlyInClusterFrame = di.inject( | ||
currentlyInClusterFrameInjectable, | ||
); | ||
|
||
if (currentlyInClusterFrame) { | ||
const { host } = di.inject(windowLocationInjectable); | ||
const clusterId = getClusterIdFromHost(host); | ||
|
||
frameId = clusterId ? `cluster-${clusterId}` : "cluster"; | ||
} else { | ||
frameId = "main"; | ||
} | ||
|
||
return new transports.File({ | ||
handleExceptions: false, | ||
level: "info", | ||
filename: `lens-renderer-${frameId}.log`, | ||
dirname: di.inject(directoryForLogsInjectable), | ||
maxsize: 1024 * 1024, | ||
maxFiles: 2, | ||
tailable: true, | ||
}); | ||
}, | ||
injectionToken: loggerTransportInjectionToken, | ||
}); | ||
|
||
export default rendererFileLoggerTransportInjectable; |