pmtool / src /utils /debug.ts
devarshia5's picture
Upload 487 files
d97b8f9 verified
Raw
History Blame Contribute Delete
4.25 kB
/**
* Debug utility for consistent logging across the application
*/
// Default to enabling logs in development, disabling in production
const isDevelopment = process.env.NODE_ENV === 'development';
// Debug configuration - can be modified at runtime
export const debugConfig = {
// Master switch to enable/disable all logs
enabled: isDevelopment,
// Enable/disable logs by category
categories: {
api: true, // API calls and responses
data: true, // Data transformations and state
ui: true, // UI interactions and events
perf: false, // Performance measurements
auth: true, // Authentication related
system: true, // System level operations
}
};
// Log levels
export enum LogLevel {
DEBUG = 'debug',
INFO = 'info',
WARN = 'warn',
ERROR = 'error'
}
/**
* Log a message if debugging is enabled
*
* @param category - The category this log belongs to
* @param message - The message to log
* @param data - Optional data to include with the log
* @param level - Log level (default: INFO)
*/
export function log(
category: keyof typeof debugConfig.categories,
message: string,
data?: any,
level: LogLevel = LogLevel.INFO
): void {
// Skip logging if master switch is off or category is disabled
if (!debugConfig.enabled || !debugConfig.categories[category]) {
return;
}
const prefix = `[${category.toUpperCase()}]`;
switch (level) {
case LogLevel.DEBUG:
console.debug(prefix, message, data !== undefined ? data : '');
break;
case LogLevel.INFO:
console.log(prefix, message, data !== undefined ? data : '');
break;
case LogLevel.WARN:
console.warn(prefix, message, data !== undefined ? data : '');
break;
case LogLevel.ERROR:
console.error(prefix, message, data !== undefined ? data : '');
break;
}
}
// Convenience methods for different log levels
export const debug = {
api: (message: string, data?: any) => log('api', message, data, LogLevel.DEBUG),
data: (message: string, data?: any) => log('data', message, data, LogLevel.DEBUG),
ui: (message: string, data?: any) => log('ui', message, data, LogLevel.DEBUG),
perf: (message: string, data?: any) => log('perf', message, data, LogLevel.DEBUG),
auth: (message: string, data?: any) => log('auth', message, data, LogLevel.DEBUG),
system: (message: string, data?: any) => log('system', message, data, LogLevel.DEBUG),
};
export const info = {
api: (message: string, data?: any) => log('api', message, data, LogLevel.INFO),
data: (message: string, data?: any) => log('data', message, data, LogLevel.INFO),
ui: (message: string, data?: any) => log('ui', message, data, LogLevel.INFO),
perf: (message: string, data?: any) => log('perf', message, data, LogLevel.INFO),
auth: (message: string, data?: any) => log('auth', message, data, LogLevel.INFO),
system: (message: string, data?: any) => log('system', message, data, LogLevel.INFO),
};
export const warn = {
api: (message: string, data?: any) => log('api', message, data, LogLevel.WARN),
data: (message: string, data?: any) => log('data', message, data, LogLevel.WARN),
ui: (message: string, data?: any) => log('ui', message, data, LogLevel.WARN),
perf: (message: string, data?: any) => log('perf', message, data, LogLevel.WARN),
auth: (message: string, data?: any) => log('auth', message, data, LogLevel.WARN),
system: (message: string, data?: any) => log('system', message, data, LogLevel.WARN),
};
export const error = {
api: (message: string, data?: any) => log('api', message, data, LogLevel.ERROR),
data: (message: string, data?: any) => log('data', message, data, LogLevel.ERROR),
ui: (message: string, data?: any) => log('ui', message, data, LogLevel.ERROR),
perf: (message: string, data?: any) => log('perf', message, data, LogLevel.ERROR),
auth: (message: string, data?: any) => log('auth', message, data, LogLevel.ERROR),
system: (message: string, data?: any) => log('system', message, data, LogLevel.ERROR),
};
export default {
debugConfig,
log,
debug,
info,
warn,
error,
LogLevel
};