Improved logging and added option for --stdout.
This commit is contained in:
@@ -3,45 +3,43 @@
|
||||
import logging
|
||||
import sys
|
||||
|
||||
# Get the root logger
|
||||
# Get the root logger for our application. Other modules will import this.
|
||||
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
|
||||
def setup_logging(console_verbose=False):
|
||||
"""
|
||||
Configures the application's logger and captures logs from yfinance.
|
||||
"""
|
||||
logger.setLevel(logging.INFO)
|
||||
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)
|
||||
if logger.hasHandlers():
|
||||
logger.handlers.clear()
|
||||
|
||||
# --- File Handler ---
|
||||
# This handler writes logs to a file
|
||||
# 'a' stands for append mode
|
||||
# File Handler (Always Verbose)
|
||||
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)
|
||||
# Console Handler (Verbosity is Controlled)
|
||||
console_handler = logging.StreamHandler(sys.stdout)
|
||||
console_formatter = logging.Formatter('%(message)s')
|
||||
console_handler.setFormatter(console_formatter)
|
||||
|
||||
if console_verbose:
|
||||
console_handler.setLevel(logging.INFO)
|
||||
else:
|
||||
console_handler.setLevel(logging.CRITICAL)
|
||||
|
||||
logger.addHandler(console_handler)
|
||||
|
||||
def get_logger():
|
||||
"""A simple function to get our configured logger."""
|
||||
return logger
|
||||
# YFINANCE LOGGER CAPTURE
|
||||
yfinance_logger = logging.getLogger("yfinance")
|
||||
yfinance_logger.propagate = False
|
||||
if yfinance_logger.hasHandlers():
|
||||
yfinance_logger.handlers.clear()
|
||||
yfinance_logger.setLevel(logging.WARNING)
|
||||
yfinance_logger.addHandler(console_handler) # Use the same console handler
|
||||
yfinance_logger.addHandler(file_handler) # Use the same file handler
|
Reference in New Issue
Block a user