mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Capture winston powered logger.error()
Signed-off-by: Hung-Han (Henry) Chen <chenhungh@gmail.com>
This commit is contained in:
parent
5bccc27204
commit
3128bce67e
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
import { app, remote } from "electron";
|
import { app, remote } from "electron";
|
||||||
import winston from "winston";
|
import winston from "winston";
|
||||||
|
import * as Sentry from "@sentry/electron";
|
||||||
import { isDebugging, isTestEnv } from "../common/vars";
|
import { isDebugging, isTestEnv } from "../common/vars";
|
||||||
|
|
||||||
const logLevel = process.env.LOG_LEVEL ? process.env.LOG_LEVEL : isDebugging ? "debug" : "info";
|
const logLevel = process.env.LOG_LEVEL ? process.env.LOG_LEVEL : isDebugging ? "debug" : "info";
|
||||||
@ -48,4 +49,55 @@ const logger = winston.createLogger({
|
|||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
export default logger;
|
type Logger = ReturnType<typeof winston.createLogger>;
|
||||||
|
type LoggerKeys = keyof typeof logger;
|
||||||
|
type LoggerError = typeof logger.error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type guard to ensure unknown is logger.error function
|
||||||
|
*/
|
||||||
|
const isLoggerError = (unknown: unknown, key: LoggerKeys): unknown is LoggerError =>
|
||||||
|
typeof unknown === "function" && key === "error";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proxied version of logger
|
||||||
|
*
|
||||||
|
* Captures error message using Sentry.captureException(...params) when logger.error(...params)
|
||||||
|
*/
|
||||||
|
const proxiedLogger: Logger = new Proxy(logger, {
|
||||||
|
get(target: Logger, key: LoggerKeys) {
|
||||||
|
const property = target[key];
|
||||||
|
|
||||||
|
if (isLoggerError(property, key)) {
|
||||||
|
return (...params: Parameters<LoggerError>) => {
|
||||||
|
// do logger.error(...params)
|
||||||
|
property(...params);
|
||||||
|
|
||||||
|
const tags = {
|
||||||
|
process: process.type,
|
||||||
|
logger: "winston"
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
const [message, ...extra] = params;
|
||||||
|
|
||||||
|
// toString() is added because Parameters<LoggerError> doesn't seems to work as expected
|
||||||
|
// (infer "message" as an object but should be a string)
|
||||||
|
Sentry.captureMessage(message.toString(), {
|
||||||
|
// need to explicitly assign level because default is Sentry.Severity.Info
|
||||||
|
level: Sentry.Severity.Error,
|
||||||
|
tags,
|
||||||
|
extra: extra ? { ...extra } : null
|
||||||
|
});
|
||||||
|
} catch {
|
||||||
|
// fallback to just captureException(params) (issue will have 'unknown' title in Sentry dashbaird)
|
||||||
|
Sentry.captureException(params, { tags });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return property;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default proxiedLogger;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user