From cf9de86ce1b5ae4a7d72e9a51b138bcac6c7e6b0 Mon Sep 17 00:00:00 2001 From: pramukesh Date: Fri, 28 Mar 2025 10:37:31 +0530 Subject: [PATCH] log: custom logging using loglevel & enum LogLevel --- .../src/altNodes/jsonNodeConversion.ts | 5 ++- packages/backend/src/code.ts | 17 ++++---- packages/backend/src/log.ts | 40 +++++++++++++++++++ 3 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 packages/backend/src/log.ts diff --git a/packages/backend/src/altNodes/jsonNodeConversion.ts b/packages/backend/src/altNodes/jsonNodeConversion.ts index a34402ec..aa8fcdd9 100644 --- a/packages/backend/src/altNodes/jsonNodeConversion.ts +++ b/packages/backend/src/altNodes/jsonNodeConversion.ts @@ -3,6 +3,7 @@ import { PluginSettings } from "types"; import { variableToColorName } from "../tailwind/conversionTables"; import { HasGeometryTrait, Node, Paint } from "../api_types"; import { calculateRectangleFromBoundingBox } from "../common/commonPosition"; +import { bench } from "../log"; // Performance tracking counters export let getNodeByIdAsyncTime = 0; @@ -547,7 +548,7 @@ export const nodesToJSON = async ( console.log("[debug] initial nodeJson", { ...nodes[0] }); - console.log( + bench( `[benchmark][inside nodesToJSON] JSON_REST_V1 export: ${Date.now() - exportJsonStart}ms`, ); @@ -574,7 +575,7 @@ export const nodesToJSON = async ( } } - console.log( + bench( `[benchmark][inside nodesToJSON] Process node pairs: ${Date.now() - processNodesStart}ms`, ); diff --git a/packages/backend/src/code.ts b/packages/backend/src/code.ts index dec2d171..571d2bed 100644 --- a/packages/backend/src/code.ts +++ b/packages/backend/src/code.ts @@ -22,6 +22,7 @@ import { processColorVariablesTime, resetPerformanceCounters, } from "./altNodes/jsonNodeConversion"; +import { bench } from "./log"; export const run = async (settings: PluginSettings) => { resetPerformanceCounters(); @@ -44,7 +45,7 @@ export const run = async (settings: PluginSettings) => { console.log("convertedSelection", convertedSelection); } else { convertedSelection = await nodesToJSON(selection, settings); - console.log(`[benchmark] nodesToJSON: ${Date.now() - nodeToJSONStart}ms`); + bench(`[benchmark] nodesToJSON: ${Date.now() - nodeToJSONStart}ms`); console.log("nodeJson", convertedSelection); } @@ -59,38 +60,38 @@ export const run = async (settings: PluginSettings) => { const convertToCodeStart = Date.now(); const code = await convertToCode(convertedSelection, settings); - console.log( + bench( `[benchmark] convertToCode: ${Date.now() - convertToCodeStart}ms`, ); const generatePreviewStart = Date.now(); const htmlPreview = await generateHTMLPreview(convertedSelection, settings); - console.log( + bench( `[benchmark] generateHTMLPreview: ${Date.now() - generatePreviewStart}ms`, ); const colorPanelStart = Date.now(); const colors = retrieveGenericSolidUIColors(framework); const gradients = retrieveGenericLinearGradients(framework); - console.log( + bench( `[benchmark] color and gradient panel: ${Date.now() - colorPanelStart}ms`, ); - console.log( + bench( `[benchmark] total generation time: ${Date.now() - nodeToJSONStart}ms`, ); // Log performance statistics - console.log( + bench( `[benchmark] getNodeByIdAsync: ${getNodeByIdAsyncTime}ms (${getNodeByIdAsyncCalls} calls, avg: ${(getNodeByIdAsyncTime / getNodeByIdAsyncCalls || 1).toFixed(2)}ms)`, ); - console.log( + bench( `[benchmark] getStyledTextSegments: ${getStyledTextSegmentsTime}ms (${getStyledTextSegmentsCalls} calls, avg: ${ getStyledTextSegmentsCalls > 0 ? (getStyledTextSegmentsTime / getStyledTextSegmentsCalls).toFixed(2) : 0 }ms)`, ); - console.log( + bench( `[benchmark] processColorVariables: ${processColorVariablesTime}ms (${processColorVariablesCalls} calls, avg: ${ processColorVariablesCalls > 0 ? (processColorVariablesTime / processColorVariablesCalls).toFixed(2) diff --git a/packages/backend/src/log.ts b/packages/backend/src/log.ts new file mode 100644 index 00000000..4b6d9288 --- /dev/null +++ b/packages/backend/src/log.ts @@ -0,0 +1,40 @@ +const enum LogLevel { + None = 0, + Benchmark, + Error, + Warn, + Info, + Log, +} + +let loglevel = LogLevel.None; + +const kConsoleLog = console.log; +const kConsoleInfo = console.info; +const kConsoleError = console.error; +const kConsoleWarn = console.warn; + +export const bench = (message?: any, ...optionalParams: any[]) => { + if (loglevel < LogLevel.Benchmark) return; + kConsoleLog(message, optionalParams); +} + +console.log = function(message?: any, ...optionalParams: any[]) { + if (loglevel < LogLevel.Log) return; + kConsoleLog(message, optionalParams); +} + +console.info = function(message?: any, ...optionalParams: any[]) { + if (loglevel < LogLevel.Info) return; + kConsoleInfo(message, optionalParams); +} + +console.warn = function(message?: any, ...optionalParams: any[]) { + if (loglevel < LogLevel.Warn) return; + kConsoleWarn(message, optionalParams); +} + +console.error = function(message?: any, ...optionalParams: any[]) { + if (loglevel < LogLevel.Error) return; + kConsoleError(message, optionalParams); +} \ No newline at end of file