51 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
import os
 | 
						|
import logging
 | 
						|
from datetime import datetime
 | 
						|
 | 
						|
class LogService:
 | 
						|
    def __init__(self, log_dir="logs"):
 | 
						|
        self.log_dir = log_dir
 | 
						|
        os.makedirs(self.log_dir, exist_ok=True)
 | 
						|
 | 
						|
        log_filename = os.path.join(self.log_dir, f"{datetime.now().strftime('%Y-%m-%d')}.log")
 | 
						|
        
 | 
						|
        # Tạo logger
 | 
						|
        self.logger = logging.getLogger("TaskLogger")
 | 
						|
        self.logger.setLevel(logging.INFO)
 | 
						|
        self.logger.propagate = False
 | 
						|
 | 
						|
        # Xóa handler cũ để tránh duplicate log khi import nhiều lần
 | 
						|
        if self.logger.handlers:
 | 
						|
            self.logger.handlers.clear()
 | 
						|
 | 
						|
        # Ghi file
 | 
						|
        file_handler = logging.FileHandler(log_filename, encoding="utf-8")
 | 
						|
        file_handler.setLevel(logging.INFO)
 | 
						|
 | 
						|
        # In ra console
 | 
						|
        console_handler = logging.StreamHandler()
 | 
						|
        console_handler.setLevel(logging.INFO)
 | 
						|
 | 
						|
        # Format log
 | 
						|
        formatter = logging.Formatter(
 | 
						|
            '%(asctime)s - %(levelname)s - %(message)s',
 | 
						|
            datefmt='%Y-%m-%d %H:%M:%S'
 | 
						|
        )
 | 
						|
        file_handler.setFormatter(formatter)
 | 
						|
        console_handler.setFormatter(formatter)
 | 
						|
 | 
						|
        self.logger.addHandler(file_handler)
 | 
						|
        self.logger.addHandler(console_handler)
 | 
						|
 | 
						|
    def info(self, message: str):
 | 
						|
        self.logger.info(message)
 | 
						|
 | 
						|
    def error(self, message: str):
 | 
						|
        self.logger.error(message)
 | 
						|
 | 
						|
    def warning(self, message: str):
 | 
						|
        self.logger.warning(message)
 | 
						|
 | 
						|
# Singleton instance dùng chung toàn app
 | 
						|
log_service = LogService()
 |