KaushiGihan's picture
Upload 17 files
07fc447 verified
import logging
import os
from logging.handlers import RotatingFileHandler
from datetime import datetime
# Get the current working directory
#current_direction = os.path.dirname(os.path.abspath(__file__))
LOG_FILE=f"{datetime.now().strftime('%m_%d_%Y_%H_%M_%S')}"
logs_path=os.path.join(os.getcwd(),"logs",LOG_FILE)
os.makedirs(logs_path,exist_ok=True)
# Define the logging configuration
def setup_logger(file_name:str=None,api_app=None):
if file_name is not None :
LOG_FILE_PATH=os.path.join(logs_path,f"{file_name}.log")
#log_formatter = logging.Formatter("%(asctime)s- %(name)s - %(levelname)s - %(message)s")
# Modified log formatter to include filename, function name, and line number
log_formatter = logging.Formatter("%(asctime)s - %(filename)s - %(funcName)s - Line %(lineno)d - %(levelname)s - %(message)s")
# File handler for logging to a file
file_handler = RotatingFileHandler(filename=LOG_FILE_PATH,maxBytes=5 * 1024 * 1024, backupCount=3) # Log file size is 5MB with 3 backups
file_handler.setFormatter(log_formatter)
file_handler.setLevel(logging.INFO)
file_handler2 = RotatingFileHandler(filename=os.path.join(logs_path,"global.log"),maxBytes=5 * 1024 * 1024, backupCount=3) # Log file size is 5MB with 3 backups
file_handler2.setFormatter(log_formatter)
file_handler2.setLevel(logging.INFO)
# Stream handler for console output (optional)
console_handler = logging.StreamHandler()
console_handler.setFormatter(log_formatter)
console_handler.setLevel(logging.DEBUG)
# Add handlers to the root logger for custom logging
root_logger = logging.getLogger(file_name)
root_logger.setLevel(logging.DEBUG)
root_logger.addHandler(file_handler)
root_logger.addHandler(file_handler2)
#root_logger.addHandler(console_handler)
if api_app is not None:
# Get the FastAPI logger and attach handlers
uvicorn_access_logger = logging.getLogger("uvicorn.access") # For request logging
uvicorn_access_logger.setLevel(logging.INFO)
uvicorn_access_logger.addHandler(file_handler)
uvicorn_access_logger.addHandler(file_handler2)
#api_logger.addHandler(console_handler)
return uvicorn_access_logger
else:
return root_logger
else:
# Modified log formatter to include filename, function name, and line number
log_formatter = logging.Formatter("%(asctime)s - %(filename)s - %(funcName)s - Line %(lineno)d - %(levelname)s - %(message)s")
file_handler2 = RotatingFileHandler(filename=os.path.join(logs_path,"global.log"),maxBytes=5 * 1024 * 1024, backupCount=3) # Log file size is 5MB with 3 backups
file_handler2.setFormatter(log_formatter)
file_handler2.setLevel(logging.INFO)
# Stream handler for console output (optional)
console_handler = logging.StreamHandler()
console_handler.setFormatter(log_formatter)
console_handler.setLevel(logging.DEBUG)
# Add handlers to the root logger for custom logging
root_logger = logging.getLogger(file_name)
root_logger.setLevel(logging.DEBUG)
root_logger.addHandler(file_handler2)
#root_logger.addHandler(console_handler)
if api_app is not None:
# Get the FastAPI logger and attach handlers
uvicorn_access_logger = logging.getLogger("uvicorn.access") # For request logging
uvicorn_access_logger.setLevel(logging.INFO)
uvicorn_access_logger.addHandler(file_handler2)
#api_logger.addHandler(console_handler)
return uvicorn_access_logger
else:
return root_logger