import logging import logging.handlers from pathlib import Path from time import gmtime from typing import Final from lang_main import LIB_PATH from lang_main.constants import ( ENABLE_LOGGING, LOGGING_TO_FILE, LOGGING_TO_STDERR, ) from lang_main.types import LoggingLevels # ** config logging.Formatter.converter = gmtime LOG_FMT: Final[str] = '%(asctime)s | lang_main:%(module)s:%(levelname)s | %(message)s' LOG_DATE_FMT: Final[str] = '%Y-%m-%d %H:%M:%S +0000' LOG_FILE_FOLDER: Final[Path] = LIB_PATH / 'logs' if not LOG_FILE_FOLDER.exists(): LOG_FILE_FOLDER.mkdir(parents=True) LOG_FILE_PATH: Final[Path] = LOG_FILE_FOLDER / 'lang-main.log' LOGGING_LEVEL_STDERR: Final[LoggingLevels] = LoggingLevels.INFO LOGGING_LEVEL_FILE: Final[LoggingLevels] = LoggingLevels.DEBUG # ** formatters logger_all_formater = logging.Formatter(fmt=LOG_FMT, datefmt=LOG_DATE_FMT) # ** handlers null_handler = logging.NullHandler() if ENABLE_LOGGING and LOGGING_TO_STDERR: logger_all_handler_stderr = logging.StreamHandler() logger_all_handler_stderr.setLevel(LOGGING_LEVEL_STDERR) logger_all_handler_stderr.setFormatter(logger_all_formater) else: logger_all_handler_stderr = null_handler if ENABLE_LOGGING and LOGGING_TO_FILE: logger_all_handler_file = logging.handlers.RotatingFileHandler( LOG_FILE_PATH, encoding='utf-8', maxBytes=5_242_880, backupCount=1, ) logger_all_handler_file.setLevel(LOGGING_LEVEL_FILE) logger_all_handler_file.setFormatter(logger_all_formater) else: logger_all_handler_file = null_handler # ** logging levels LOGGING_LEVEL_PREPROCESS: Final[LoggingLevels] = LoggingLevels.DEBUG LOGGING_LEVEL_PIPELINES: Final[LoggingLevels] = LoggingLevels.DEBUG LOGGING_LEVEL_GRAPHS: Final[LoggingLevels] = LoggingLevels.DEBUG LOGGING_LEVEL_TIMELINE: Final[LoggingLevels] = LoggingLevels.DEBUG LOGGING_LEVEL_TOKEN_ANALYSIS: Final[LoggingLevels] = LoggingLevels.DEBUG LOGGING_LEVEL_SHARED_HELPERS: Final[LoggingLevels] = LoggingLevels.DEBUG LOGGING_LEVEL_RENDERING: Final[LoggingLevels] = LoggingLevels.DEBUG LOGGING_LEVEL_CONFIG: Final[LoggingLevels] = LoggingLevels.DEBUG # ** loggers and configuration logger_all = logging.getLogger('lang_main') logger_all.addHandler(logger_all_handler_stderr) logger_all.addHandler(logger_all_handler_file) logger_config = logging.getLogger('lang_main.config') logger_config.setLevel(LOGGING_LEVEL_CONFIG) logger_shared_helpers = logging.getLogger('lang_main.shared') logger_shared_helpers.setLevel(LOGGING_LEVEL_SHARED_HELPERS) logger_preprocess = logging.getLogger('lang_main.analysis.preprocessing') logger_graphs = logging.getLogger('lang_main.analysis.graphs') logger_graphs.setLevel(LOGGING_LEVEL_GRAPHS) logger_timeline = logging.getLogger('lang_main.analysis.timeline') logger_timeline.setLevel(LOGGING_LEVEL_TIMELINE) logger_token_analysis = logging.getLogger('lang_main.analysis.tokens') logger_token_analysis.setLevel(LOGGING_LEVEL_TOKEN_ANALYSIS) logger_preprocess.setLevel(LOGGING_LEVEL_PREPROCESS) logger_pipelines = logging.getLogger('lang_main.pipelines') logger_pipelines.setLevel(LOGGING_LEVEL_PIPELINES) logger_rendering = logging.getLogger('lang_main.render') logger_rendering.setLevel(LOGGING_LEVEL_RENDERING)