Source code for binpan.core.logs

"""

Logging functions

"""

import logging
from os import makedirs, path
from logging.handlers import RotatingFileHandler


[docs] class LogManager: """ Main logging class. """ def __init__(self, filename: str, name: str = None, folder: str = 'logs', info_level='DEBUG', max_log_size_mb: int = 10, backup_count: int = 5): if name is None: if '\\' in filename: name = filename.split('\\')[-1].split('.')[0] else: name = filename.split('/')[-1].split('.')[0] try: makedirs(name=folder, exist_ok=True) except PermissionError: # linux home = path.expanduser('~') makedirs(f'{home}/.binpan/', exist_ok=True) self.logger = logging.getLogger(name) # avoid duplicated logs if self.logger.hasHandlers(): self.logger.handlers = [] self.log_file = filename # Create handlers self.screen_handler = logging.StreamHandler() self.file_handler = RotatingFileHandler(self.log_file, maxBytes=max_log_size_mb * 1024 * 1024, backupCount=backup_count, encoding='utf-8') self.line_format = '%(asctime)s %(levelname)8s %(message)s' self.screen_format = logging.Formatter(self.line_format, datefmt='%Y-%m-%d\t %H:%M:%S') self.file_format = logging.Formatter(self.line_format, datefmt='%Y-%m-%d\t %H:%M:%S') self.screen_handler.setFormatter(self.screen_format) self.file_handler.setFormatter(self.file_format) # Add handlers to the logger self.logger.addHandler(self.screen_handler) self.logger.addHandler(self.file_handler) # Set level self.level = getattr(logging, info_level) self.logger.setLevel(self.level)
[docs] def debug(self, msg): """DEBUG Method""" self.logger.debug(msg)
[docs] def info(self, msg): """INFO Method""" self.logger.info(msg)
[docs] def warning(self, msg): """WARNING Method""" self.logger.warning(msg)
[docs] def error(self, msg): """ERROR Method""" self.logger.error(msg, exc_info=True)
[docs] def critical(self, msg): """CRITICAL Method""" self.logger.critical(msg, exc_info=True)
[docs] def read_last_lines(self, num_lines): with open(self.log_file, 'r', encoding='utf-8') as file: lines = file.readlines() return lines[-num_lines:]