diff --git a/.gitignore b/.gitignore index 5b636fc..bbeb01b 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ wheels/ .python-version stuff/ M3U8/scrapers/caches/* +*.log \ No newline at end of file diff --git a/M3U8/fetch.py b/M3U8/fetch.py index a8530db..d58138c 100644 --- a/M3U8/fetch.py +++ b/M3U8/fetch.py @@ -49,6 +49,8 @@ def load_base() -> tuple[list[str], int]: async def main() -> None: + log.info(f"{'=' * 10} Scraper Started {'=' * 10}") + base_m3u8, tvg_chno = load_base() tasks = [ @@ -144,6 +146,10 @@ async def main() -> None: log.info(f"Events saved to {EVENTS_FILE.resolve()}") + for hndlr in log.handlers: + hndlr.flush() + hndlr.stream.write("\n") + if __name__ == "__main__": asyncio.run(main()) diff --git a/M3U8/scrapers/utils/logger.py b/M3U8/scrapers/utils/logger.py index 51c4082..0d52994 100644 --- a/M3U8/scrapers/utils/logger.py +++ b/M3U8/scrapers/utils/logger.py @@ -1,6 +1,11 @@ import logging +from logging.handlers import TimedRotatingFileHandler from pathlib import Path +LOG_DIR = Path(__file__).parent.parent.parent / "logs" + +LOG_DIR.mkdir(exist_ok=True) + LOG_FMT = ( "[%(asctime)s] " "%(levelname)-8s " @@ -14,7 +19,6 @@ COLORS = { "INFO": "\033[32m", "WARNING": "\033[33m", "ERROR": "\033[31m", - "CRITICAL": "\033[1;41m", "reset": "\033[0m", } @@ -40,18 +44,33 @@ def get_logger(name: str | None = None) -> logging.Logger: logger = logging.getLogger(name) - if not logger.hasHandlers(): - handler = logging.StreamHandler() + logger.setLevel(logging.INFO) - formatter = ColorFormatter(LOG_FMT, datefmt="%Y-%m-%d | %H:%M:%S") + if logger.hasHandlers(): + return logger - handler.setFormatter(formatter) + formatting = {"fmt": LOG_FMT, "datefmt": "%Y-%m-%d | %H:%M:%S"} - logger.addHandler(handler) + file_handler = TimedRotatingFileHandler( + LOG_DIR / "fetch.log", + when="midnight", + interval=1, + backupCount=3, + encoding="utf-8", + utc=False, + ) - logger.setLevel(logging.INFO) + file_handler.setFormatter(logging.Formatter(**formatting)) - logger.propagate = False + console_handler = logging.StreamHandler() + + console_handler.setFormatter(ColorFormatter(**formatting)) + + logger.addHandler(file_handler) + + logger.addHandler(console_handler) + + logger.propagate = False return logger