diff --git a/browser-extension/src/lib/config.ts b/browser-extension/src/lib/config.ts index eb8b231..74b71b2 100644 --- a/browser-extension/src/lib/config.ts +++ b/browser-extension/src/lib/config.ts @@ -2,9 +2,13 @@ const MODES = ['PROD', 'PLAYGROUNDS_PR'] as const export type ModeType = (typeof MODES)[number] +const LOG_LEVELS = ['DEBUG', 'INFO', 'WARN', 'ERROR'] as const + +export type LogLevel = (typeof LOG_LEVELS)[number] + export const CONFIG = { ADDED_OVERTYPE_CLASS: 'gitcasso-overtype', - DEBUG: true, // enabled debug logging EXTENSION_NAME: 'gitcasso', // decorates logs + LOG_LEVEL: 'DEBUG' satisfies LogLevel, MODE: 'PROD' satisfies ModeType, } as const diff --git a/browser-extension/src/lib/logger.ts b/browser-extension/src/lib/logger.ts index d11faa3..e6111a5 100644 --- a/browser-extension/src/lib/logger.ts +++ b/browser-extension/src/lib/logger.ts @@ -1,4 +1,4 @@ -import { CONFIG } from './config' +import { CONFIG, type LogLevel } from './config' /** * Simple logging utilities for the extension @@ -9,12 +9,25 @@ const prefix = `[${CONFIG.EXTENSION_NAME}]` // No-op function for disabled logging const noop = () => {} +// Log level hierarchy - index represents priority +const LOG_LEVEL_PRIORITY: Record = { + DEBUG: 0, + ERROR: 3, + INFO: 1, + WARN: 2, +} + +// Helper function to check if a log level is enabled +const shouldLog = (level: LogLevel): boolean => { + return LOG_LEVEL_PRIORITY[level] >= LOG_LEVEL_PRIORITY[CONFIG.LOG_LEVEL] +} + // Export simple logging functions export const logger = { - debug: CONFIG.DEBUG ? console.log.bind(console, prefix) : noop, - error: console.error.bind(console, prefix), - info: CONFIG.DEBUG ? console.log.bind(console, prefix) : noop, - time: CONFIG.DEBUG ? console.time.bind(console) : noop, - timeEnd: CONFIG.DEBUG ? console.timeEnd.bind(console) : noop, - warn: console.warn.bind(console, prefix), + debug: shouldLog('DEBUG') ? console.log.bind(console, prefix) : noop, + error: shouldLog('ERROR') ? console.error.bind(console, prefix) : noop, + info: shouldLog('INFO') ? console.log.bind(console, prefix) : noop, + time: shouldLog('INFO') ? console.time.bind(console) : noop, + timeEnd: shouldLog('INFO') ? console.timeEnd.bind(console) : noop, + warn: shouldLog('WARN') ? console.warn.bind(console, prefix) : noop, }