Source code for scitex_logging._config

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Timestamp: "2025-08-21 21:41:37 (ywatanabe)"
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/log/_config.py
# ----------------------------------------
from __future__ import annotations

import os

__FILE__ = __file__
__DIR__ = os.path.dirname(__FILE__)
# ----------------------------------------

"""Configuration and setup for SciTeX logging."""

import logging
from typing import Optional, Union

from ._handlers import create_console_handler, create_file_handler, get_default_log_path
from ._levels import CRITICAL, DEBUG, ERROR, FAIL, INFO, SUCCESS, WARNING
from ._logger import setup_logger_class

# Global level variable
_GLOBAL_LEVEL = None
_FILE_LOGGING_ENABLED = True  # Enable file logging by default


[docs] def set_level(level: Union[str, int]): """Set global log level for all SciTeX loggers.""" global _GLOBAL_LEVEL level_map = { "debug": DEBUG, "info": INFO, "warning": WARNING, "error": ERROR, "critical": CRITICAL, "success": SUCCESS, "fail": FAIL, } if isinstance(level, str): level = level_map.get(level.lower(), level) _GLOBAL_LEVEL = level logging.getLogger().setLevel(level) # Update all existing handlers for handler in logging.getLogger().handlers: handler.setLevel(level)
[docs] def get_level(): """Get current global log level.""" return _GLOBAL_LEVEL or logging.getLogger().level
[docs] def enable_file_logging(enabled: bool = True): """Enable or disable file logging globally.""" global _FILE_LOGGING_ENABLED _FILE_LOGGING_ENABLED = enabled
[docs] def is_file_logging_enabled(): """Check if file logging is enabled.""" return _FILE_LOGGING_ENABLED
[docs] def configure( level: Union[str, int] = "info", log_file: Optional[str] = None, enable_file: bool = True, enable_console: bool = True, capture_prints: bool = True, max_file_size: int = 10 * 1024 * 1024, backup_count: int = 5, ): """Configure logging for SciTeX with both console and file output. Args: level: Log level (string or logging constant) log_file: Path to log file (default: ~/.scitex/logging/runtime/scitex-YYYY-MM-DD.log) enable_file: Whether to enable file logging enable_console: Whether to enable console logging capture_prints: Whether to capture print() statements to logs max_file_size: Maximum size of log file before rotation (default: 10MB) backup_count: Number of backup files to keep (default: 5) """ # Setup custom logger class setup_logger_class() # Convert level if string level_map = { "debug": DEBUG, "info": INFO, "warning": WARNING, "error": ERROR, "critical": CRITICAL, "success": SUCCESS, "fail": FAIL, } if isinstance(level, str): level = level_map.get(level.lower(), level) # Set global level set_level(level) # Clear any existing handlers root_logger = logging.getLogger() for handler in root_logger.handlers[:]: root_logger.removeHandler(handler) handlers = [] # Add console handler if enabled if enable_console: console_handler = create_console_handler(level) handlers.append(console_handler) # Add file handler if enabled if enable_file and is_file_logging_enabled(): if log_file is None: log_file = get_default_log_path() file_handler = create_file_handler( log_file, level, max_bytes=max_file_size, backup_count=backup_count ) handlers.append(file_handler) # Configure basic logging with our handlers logging.basicConfig( level=level, handlers=handlers, force=True, # Force reconfiguration ) # Enable print capture if requested if capture_prints: from ._print_capture import enable_print_capture enable_print_capture()
[docs] def get_log_path(): """Get the current log file path.""" for handler in logging.getLogger().handlers: if hasattr(handler, "baseFilename"): return handler.baseFilename return None
__all__ = [ "set_level", "get_level", "enable_file_logging", "is_file_logging_enabled", "configure", "get_log_path", ] # EOF