Source code for fabex.utilities.logging_utils
"""Fabex 'logging_utils.py' © 2025"""
import logging
from datetime import UTC, datetime
from pathlib import Path
[docs]
def heading(text):
border = int((LOG_WIDTH - len(text) - 4) / 2) * "~"
text = f"\n[{border} {text} {border}]"
if len(text) == 60:
text = text.replace("~]", "~~]")
return text
[docs]
current_time = datetime.now(tz=UTC).strftime("%Y%m%d_%H%M%S")
[docs]
log = logging.getLogger("fabex_logger")
log.setLevel(logging.DEBUG)
# Create file handler for logging
[docs]
log_folder = Path(__file__).parent.parent / "logs"
log_folder.mkdir(parents=True, exist_ok=True)
[docs]
log_path = Path(log_folder, f"{current_time}.log")
[docs]
file_handler = logging.FileHandler(log_path)
file_handler.setLevel(logging.DEBUG)
# Create another file handler for error logging
[docs]
error_log_folder = Path(__file__).parent.parent / "logs"
error_log_folder.mkdir(parents=True, exist_ok=True)
[docs]
error_log_path = Path(error_log_folder, f"Error_{current_time}.log")
[docs]
error_handler = logging.FileHandler(error_log_path)
error_handler.setLevel(logging.ERROR)
# Create another file handler for test logging
[docs]
test_log_folder = Path(__file__).parent.parent / "logs"
test_log_folder.mkdir(parents=True, exist_ok=True)
[docs]
test_log_path = Path(error_log_folder, f"Test_{current_time}.log")
[docs]
test_handler = logging.FileHandler(error_log_path)
test_handler.setLevel(logging.ERROR)
# Create console handler to pass messages to console
[docs]
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
# Define custom format for the log messages
error_formatter = test_formatter = logging.Formatter(
"%(asctime)s | %(levelname)s: %(message)s | File '%(pathname)s', line %(lineno)d in %(funcName)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
file_handler.setFormatter(file_formatter)
error_handler.setFormatter(error_formatter)
test_handler.setFormatter(test_formatter)
console_handler.setFormatter(console_formatter)
# Adding handlers to the logger
log.addHandler(file_handler)
log.addHandler(error_handler)
log.addHandler(test_handler)
log.addHandler(console_handler)