import logging.handlers
import os
import sys
import logging
from loguru import logger
from selenium.webdriver.remote.remote_connection import LOGGER as selenium_logger
from config import LOG_LEVEL, LOG_SELENIUM_LEVEL, LOG_TO_CONSOLE, LOG_TO_FILE
def remove_default_loggers():
"""Remove default loggers from root logger."""
root_logger = logging.getLogger()
if root_logger.hasHandlers():
root_logger.handlers.clear()
if os.path.exists("log/app.log"):
os.remove("log/app.log")
def init_loguru_logger():
"""Initialize and configure loguru logger."""
def get_log_filename():
return f"log/app.log"
log_file = get_log_filename()
os.makedirs(os.path.dirname(log_file), exist_ok=True)
logger.remove()
# Add file logger if LOG_TO_FILE is True
if LOG_TO_FILE:
logger.add(
log_file,
level=LOG_LEVEL,
rotation="10 MB",
retention="1 week",
compression="zip",
format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {name}:{function}:{line} - {message}",
backtrace=True,
diagnose=True,
)
# Add console logger if LOG_TO_CONSOLE is True
if LOG_TO_CONSOLE:
logger.add(
sys.stderr,
level=LOG_LEVEL,
format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {name}:{function}:{line} - {message}",
backtrace=True,
diagnose=True,
)
def init_selenium_logger():
"""Initialize and configure selenium logger to write to selenium.log."""
log_file = "log/selenium.log"
os.makedirs(os.path.dirname(log_file), exist_ok=True)
selenium_logger.handlers.clear()
selenium_logger.setLevel(LOG_SELENIUM_LEVEL)
# Create file handler for selenium logger
file_handler = logging.handlers.TimedRotatingFileHandler(
log_file, when="D", interval=1, backupCount=5
)
file_handler.setLevel(LOG_SELENIUM_LEVEL)
# Define a simplified format for selenium logger entries
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
file_handler.setFormatter(formatter)
# Add the file handler to selenium_logger
selenium_logger.addHandler(file_handler)
remove_default_loggers()
init_loguru_logger()
init_selenium_logger()