Created
March 6, 2025 14:58
-
-
Save hoseinit/b933833a5e0db0c5c030f9e7028a8956 to your computer and use it in GitHub Desktop.
A logger which can be used accross the python module classes and write into a file which is labled based on date
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import logging | |
import os | |
from datetime import datetime | |
class Logger: | |
_instance = None | |
def __new__(cls, log_prefix='projectname', level=logging.INFO, log_folder='logs'): | |
if cls._instance is None: | |
cls._instance = super(Logger, cls).__new__(cls) | |
cls._instance.initialize_logger(log_prefix, level, log_folder) | |
return cls._instance | |
def initialize_logger(self, log_prefix, level, log_folder): | |
self.log_prefix = log_prefix | |
self.log_folder = log_folder | |
self.current_date = datetime.now().strftime('%d%m%Y') | |
self.logger = logging.getLogger('dated_logger') | |
self.logger.setLevel(level) | |
self.setup_file_handler() | |
def setup_file_handler(self): | |
# Remove existing handlers to avoid duplicate logs | |
for handler in self.logger.handlers[:]: | |
self.logger.removeHandler(handler) | |
# Ensure logs directory exists | |
if not os.path.exists(self.log_folder): | |
os.makedirs(self.log_folder) | |
# Create new file handler with current date | |
log_file = os.path.join(self.log_folder, f"{self.log_prefix}-{self.current_date}.log") | |
file_handler = logging.FileHandler(log_file) | |
file_handler.setLevel(logging.DEBUG) | |
# Create formatter | |
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') | |
file_handler.setFormatter(formatter) | |
# Add handler to logger | |
self.logger.addHandler(file_handler) | |
def check_date_change(self): | |
today = datetime.now().strftime('%d%m%Y') | |
if today != self.current_date: | |
self.current_date = today | |
self.setup_file_handler() | |
@classmethod | |
def get_logger(cls): | |
if cls._instance is None: | |
cls() # Initialize with default parameters | |
cls._instance.check_date_change() | |
return cls._instance.logger | |
# Convenience methods | |
@classmethod | |
def debug(cls, message): | |
cls.get_logger().debug(message) | |
@classmethod | |
def info(cls, message): | |
cls.get_logger().info(message) | |
@classmethod | |
def warning(cls, message): | |
cls.get_logger().warning(message) | |
@classmethod | |
def error(cls, message): | |
cls.get_logger().error(message) | |
@classmethod | |
def critical(cls, message): | |
cls.get_logger().critical(message) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Use it like