| const isDevelopment = import.meta.env.MODE === 'development'; |
| const isLoggerEnabled = import.meta.env.VITE_ENABLE_LOGGER === 'true'; |
| const loggerFilter = import.meta.env.VITE_LOGGER_FILTER || ''; |
|
|
| type LogFunction = (...args: unknown[]) => void; |
|
|
| const createLogFunction = ( |
| consoleMethod: LogFunction, |
| type?: 'log' | 'warn' | 'error' | 'info' | 'debug' | 'dir', |
| ): LogFunction => { |
| return (...args: unknown[]) => { |
| if (isDevelopment || isLoggerEnabled) { |
| const tag = typeof args[0] === 'string' ? args[0] : ''; |
| if (shouldLog(tag)) { |
| if (tag && typeof args[1] === 'string' && type === 'error') { |
| consoleMethod(`[${tag}] ${args[1]}`, ...args.slice(2)); |
| } else if (tag && args.length > 1) { |
| consoleMethod(`[${tag}]`, ...args.slice(1)); |
| } else { |
| consoleMethod(...args); |
| } |
| } |
| } |
| }; |
| }; |
|
|
| const logger = { |
| log: createLogFunction(console.log, 'log'), |
| dir: createLogFunction(console.dir, 'dir'), |
| warn: createLogFunction(console.warn, 'warn'), |
| info: createLogFunction(console.info, 'info'), |
| error: createLogFunction(console.error, 'error'), |
| debug: createLogFunction(console.debug, 'debug'), |
| }; |
|
|
| function shouldLog(tag: string): boolean { |
| if (!loggerFilter) { |
| return true; |
| } |
| |
| if (!tag) { |
| return true; |
| } |
| return loggerFilter |
| .split(',') |
| .some((filter) => tag.toLowerCase().includes(filter.trim().toLowerCase())); |
| } |
|
|
| export default logger; |
|
|