Files
Azornes-Comfyui-Model-Resolver/web/log_system/log_funcs.js
T
Dariusz L a4d5bd4c5c feat(logging): add frontend/backend log controls, unify console logging
- Add frontend_logs_enabled/frontend_log_level and backend_logs_enabled/backend_log_level
  toggles and selectors in the Options panel (web/resolver/views/options_methods.js)
- Sync frontend logging settings from localStorage / server settings into the
  frontend logger on startup and settings load (download_target_methods.js)
- Apply backend logging settings from server settings in the Python backend
  (__init__.py), loading control state on startup and after saves
- Make frontend Logger resilient to stored configs that lack an 'enabled' flag
  and to legacy/invalid moduleSettings levels (logger.js)
- Guard default module logger level initialization against undefined settings
  (log_funcs.js)
- Replace scattered console.log/usages with module-level log.debug calls across
  resolve_download_methods.js, model_resolver.js, and workflow_state_methods.js
- Bump log system package version to 1.5.6 (core + web)
2026-06-17 01:51:29 +02:00

85 lines
2.8 KiB
JavaScript

/**
author: Azornes
title: AzLogs
version: 1.5.6
description: Logging Initializator
Features:
log_funcs - Centralization of logger initialization
Eliminates repetitive logger initialization code in each module
*/
import { logger, LogLevel } from "./logger.js";
import { LOG_LEVEL } from './config.js';
/**
* Creates a logger object for a module with predefined methods
* @param {string} moduleName - Module name
* @returns {Logger} Object with logging methods
*/
export function createModuleLogger(moduleName) {
logger.config.moduleSettings = logger.config.moduleSettings || {};
if (logger.config.moduleSettings[moduleName] === undefined) {
logger.setModuleLevel(moduleName, logger.normalizeLevel(logger.config.globalLevel, LogLevel[LOG_LEVEL]));
}
return {
debug: (...args) => logger.debug(moduleName, ...args),
info: (...args) => logger.info(moduleName, ...args),
warn: (...args) => logger.warn(moduleName, ...args),
error: (...args) => logger.error(moduleName, ...args)
};
}
/**
* Creates a logger with automatic module name detection from URL
* @returns {Logger} Object with logging methods
*/
export function createAutoLogger() {
const stack = new Error().stack;
const match = stack?.match(/\/([^\/]+)\.js/);
const moduleName = match ? match[1] : 'Unknown';
return createModuleLogger(moduleName);
}
/**
* Wrapper for operations with automatic error logging
* @param {Function} operation - Operation to execute
* @param {Logger} log - Logger object
* @param {string} operationName - Operation name (for logs)
* @returns {Function} Wrapped function
*/
export function withErrorLogging(operation, log, operationName) {
return async function (...args) {
try {
log.debug(`Starting ${operationName}`);
const result = await operation.apply(this, args);
log.debug(`Completed ${operationName}`);
return result;
}
catch (error) {
log.error(`Error in ${operationName}:`, error);
throw error;
}
};
}
/**
* Decorator for class methods with automatic logging
* @param {Logger} log - Logger object
* @param {string} methodName - Method name
*/
export function logMethod(log, methodName) {
return function (target, propertyKey, descriptor) {
const originalMethod = descriptor.value;
descriptor.value = async function (...args) {
try {
log.debug(`${methodName || propertyKey} started`);
const result = await originalMethod.apply(this, args);
log.debug(`${methodName || propertyKey} completed`);
return result;
}
catch (error) {
log.error(`${methodName || propertyKey} failed:`, error);
throw error;
}
};
return descriptor;
};
}