POWR/lib/utils/logger.ts

182 lines
4.7 KiB
TypeScript
Raw Normal View History

// lib/utils/logger.ts
/**
* Logging levels to control verbosity
*/
export enum LogLevel {
ERROR = 0, // Only errors
WARN = 1, // Errors and warnings
INFO = 2, // Normal operational information
DEBUG = 3, // Detailed information for debugging
VERBOSE = 4 // Very detailed information
}
interface LogConfig {
level: LogLevel;
enabledModules: string[];
disabledModules: string[];
}
/**
* Global logging configuration
*/
const config: LogConfig = {
level: __DEV__ ? LogLevel.WARN : LogLevel.WARN, // Using WARN even in dev mode to reduce logs
enabledModules: [], // If empty, all non-disabled modules are enabled
disabledModules: [
// Social feed modules
'SocialFeed.EventProcessing',
'SocialFeedCache',
'SocialFeed',
'useFeedHooks',
// Database modules
'Database',
'DB',
'Schema',
'SQLite',
// Network & connection modules
'NDK',
'ContactCacheService',
'RelayService',
'ReactQueryAuthProvider',
'RelayStore',
'RelayInitializer'
] // Modules to disable by default
};
/**
* Get the current logging level
*/
export function getLogLevel(): LogLevel {
return config.level;
}
/**
* Set the global logging level
*/
export function setLogLevel(level: LogLevel): void {
config.level = level;
}
/**
* Enable logging for specific module
*/
export function enableModule(moduleName: string): void {
// Remove from disabled modules if present
const index = config.disabledModules.indexOf(moduleName);
if (index !== -1) {
config.disabledModules.splice(index, 1);
}
// Add to enabled modules if not already there
if (!config.enabledModules.includes(moduleName)) {
config.enabledModules.push(moduleName);
}
}
/**
* Disable logging for specific module
*/
export function disableModule(moduleName: string): void {
// Remove from enabled modules if present
const index = config.enabledModules.indexOf(moduleName);
if (index !== -1) {
config.enabledModules.splice(index, 1);
}
// Add to disabled modules if not already there
if (!config.disabledModules.includes(moduleName)) {
config.disabledModules.push(moduleName);
}
}
/**
* Check if logging is enabled for the given module and level
*/
function isLoggingEnabled(moduleName: string, level: LogLevel): boolean {
// Check if level is enabled
if (level > config.level) {
return false;
}
// Check if module is explicitly disabled
if (config.disabledModules.includes(moduleName)) {
return false;
}
// Check if we have a specific enabled list
if (config.enabledModules.length > 0) {
return config.enabledModules.includes(moduleName);
}
// If we get here, the module is not disabled and there's no specific enabled list
return true;
}
/**
* Create a logger for a specific module
*/
export function createLogger(moduleName: string) {
return {
error: (message: string, ...args: any[]) => {
if (isLoggingEnabled(moduleName, LogLevel.ERROR)) {
console.error(`[${moduleName}] ${message}`, ...args);
}
},
warn: (message: string, ...args: any[]) => {
if (isLoggingEnabled(moduleName, LogLevel.WARN)) {
console.warn(`[${moduleName}] ${message}`, ...args);
}
},
info: (message: string, ...args: any[]) => {
if (isLoggingEnabled(moduleName, LogLevel.INFO)) {
console.log(`[${moduleName}] ${message}`, ...args);
}
},
debug: (message: string, ...args: any[]) => {
if (isLoggingEnabled(moduleName, LogLevel.DEBUG)) {
console.log(`[${moduleName}] ${message}`, ...args);
}
},
verbose: (message: string, ...args: any[]) => {
if (isLoggingEnabled(moduleName, LogLevel.VERBOSE)) {
console.log(`[${moduleName}] ${message}`, ...args);
}
}
};
}
/**
* Enable only error logs to reduce noise during troubleshooting
* @param enable Whether to enable quiet mode (only errors)
*/
export function setQuietMode(enable: boolean): void {
if (enable) {
// Save current log level before changing it
const savedLevel = config.level;
// Only show errors
config.level = LogLevel.ERROR;
console.log('🔇 Logger quiet mode enabled - only showing errors');
return;
} else {
// Restore to INFO logs
config.level = LogLevel.INFO;
console.log('🔊 Logger quiet mode disabled - showing normal logs');
}
}
// Create a default logger
export const logger = createLogger('App');
// Add some common module loggers
export const socialFeedLogger = createLogger('SocialFeed');
export const eventProcessingLogger = createLogger('SocialFeed.EventProcessing');
export const databaseLogger = createLogger('Database');
export const networkLogger = createLogger('Network');
export const authLogger = createLogger('Auth');