# rstat_tool/logger_setup.py import logging import sys # Get the root logger logger = logging.getLogger("rstat_app") logger.setLevel(logging.INFO) # Set the minimum level of messages to handle # Prevent the logger from propagating messages to the parent (root) logger logger.propagate = False # Only add handlers if they haven't been added before # This prevents duplicate log messages if this function is called multiple times. if not logger.handlers: # --- Console Handler --- # This handler prints logs to the standard output (your terminal) console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) # A simple formatter for the console console_formatter = logging.Formatter('%(message)s') console_handler.setFormatter(console_formatter) logger.addHandler(console_handler) # --- File Handler --- # This handler writes logs to a file # 'a' stands for append mode file_handler = logging.FileHandler("rstat.log", mode='a') file_handler.setLevel(logging.INFO) # A more detailed formatter for the file, including timestamp and log level file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S') file_handler.setFormatter(file_formatter) logger.addHandler(file_handler) # Get the logger used by the yfinance library yfinance_logger = logging.getLogger("yfinance") # Set its level to capture warnings and errors yfinance_logger.setLevel(logging.WARNING) # Add our existing handlers to it. This tells yfinance's logger # to send its messages to our console and our log file. if not yfinance_logger.handlers: yfinance_logger.addHandler(console_handler) yfinance_logger.addHandler(file_handler) def get_logger(): """A simple function to get our configured logger.""" return logger