diff --git a/bin/utils/__init__.py b/bin/utils/__init__.py index 07b14e7..dd8c1a8 100644 --- a/bin/utils/__init__.py +++ b/bin/utils/__init__.py @@ -15,16 +15,15 @@ from bin.utils.logger import logger class MulThreadDownload(threading.Thread): - """继承threading使用多线程""" def __init__(self, url, startpos, endpos, f, name): super(MulThreadDownload, self).__init__() self.session = requests.Session() self.session.trust_env = False - self.url = url + self.url = url # 资源Url self.startpos = startpos self.endpos = endpos - self.fd = f - self.name = name + self.fd = f # 文件操作 + self.name = name # 线程名称 def download(self): """ @@ -48,6 +47,7 @@ class MulThreadDownload(threading.Thread): class Check: """检查md5是否相同和下载数据库""" + def __init__(self): self.assets_url = 'https://themedatabases.vercel.app/assets' self.remote_md5 = 'https://themedatabases.vercel.app/md5' @@ -67,7 +67,7 @@ class Check: logger.info(f'远程数据库md5: {remote_md5}') if local_md5 != remote_md5: logger.error('下载错误: 本地数据库md5和远程数据库md5检验不通过, 即将开始重新下载\nI: 本次下载将使用单线程下载') - single_download(self.assets_url) + self.single_download() else: logger.info('md5检验已通过') @@ -106,36 +106,33 @@ class Check: self.check_md5() - -def single_download(url): - """ - 单线程进行下载 - :param url: - :return: - """ - session = requests.Session() - session.trust_env = False - logger.info(f'正在使用单线程下载中') - resp = session.get(url) - with open('./db/style.db', 'wb') as fp: - fp.write(resp.content) - logger.info('下载完成 正在检验文件md5') - with open('./db/style.db', 'rb') as fp: - data = fp.read() - local_md5 = hashlib.md5(data).hexdigest() - remote_md5 = session.get('https://themedatabases.vercel.app/md5').json()['data'][0] - logger.info(f'本地数据库md5: {local_md5}') - logger.info(f'远程数据库md5: {remote_md5}') - if local_md5 != remote_md5: - logger.error('md5检验未通过请手动前往 https://themedatabases.vercel.app/assets 下载文件并放入./bin/assets文件夹内') - sys.exit(-1) - else: - logger.info('md5检验已通过') + def single_download(self): + """ + 单线程进行下载 + :return: + """ + session = requests.Session() + session.trust_env = False + logger.info(f'正在使用单线程下载中') + resp = session.get(self.assets_url) + with open('./db/style.db', 'wb') as fp: + fp.write(resp.content) + logger.info('下载完成 正在检验文件md5') + with open('./db/style.db', 'rb') as fp: + data = fp.read() + local_md5 = hashlib.md5(data).hexdigest() + remote_md5 = session.get('https://themedatabases.vercel.app/md5').json()['data'][0] + logger.info(f'本地数据库md5: {local_md5}') + logger.info(f'远程数据库md5: {remote_md5}') + if local_md5 != remote_md5: + logger.error('md5检验未通过请手动前往 https://themedatabases.vercel.app/assets 下载文件并放入./bin/assets文件夹内') + sys.exit(-1) + else: + logger.info('md5检验已通过') if __name__ != '__main__': - if not os.path.exists('./bin/log'): - os.mkdir('./bin/log') + __all__ = ['b64img', 'error', 'logger', 'view'] if not os.path.exists('./db/style.db'): logger.error('没有检测到本地主题数据库即将开始下载') Check().download() diff --git a/bin/utils/logger.py b/bin/utils/logger.py index 6e605d4..ad1c6e3 100644 --- a/bin/utils/logger.py +++ b/bin/utils/logger.py @@ -8,17 +8,22 @@ import time import logging.handlers +from logging import Logger from colorlog import ColoredFormatter -class Logger: +class MakeLogger: def __init__(self): self.date_format = '%H:%M:%S' - self.info_format_console = '%(log_color)s[%(asctime)s] |%(filename)s[%(lineno)-3s] |%(levelname)-8s |%(message)s' - self.info_format_file = '[%(asctime)s] |%(filename)s[%(funcName)sline:%(lineno)d] |%(levelname)-8s |%(message)s' + self.format_console = '%(log_color)s[%(asctime)s] |%(filename)s[%(lineno)-3s] |%(levelname)-8s |%(message)s' + self.format_file = '[%(asctime)s] |%(filename)s[%(funcName)sline:%(lineno)d] |%(levelname)-8s |%(message)s' - def set_logger(self): - formatter = ColoredFormatter(fmt=self.info_format_console, + def setup_logger(self) -> Logger: + """ + 建立日志器 + :return: + """ + formatter = ColoredFormatter(fmt=self.format_console, datefmt=self.date_format, reset=True, log_colors={ @@ -26,24 +31,25 @@ class Logger: 'INFO': 'light_cyan', 'WARNING': 'yellow', 'ERROR': 'red', - 'CRITICAL': 'red,bold_red'}) - formatter_file = logging.Formatter(fmt=self.info_format_file, - datefmt=self.date_format) + 'CRITICAL': 'red,bold_red'}) # 定义终端输出颜色 + formatter_file = logging.Formatter(fmt=self.format_file, + datefmt=self.date_format) # 文件输入不使用颜色 - _logger = logging.getLogger('MainLogger') - _logger.setLevel(logging.DEBUG) + _logger = logging.getLogger('RequestCounter') # 设置日志器名称 + _logger.setLevel(logging.DEBUG) # 设置等级 - ConsoleLogger = logging.StreamHandler() # 输出到终端 - ConsoleLogger.setFormatter(formatter) + console_logger = logging.StreamHandler() # 输出到终端 + console_logger.setFormatter(formatter) # 设置输出格式化 log_name = time.strftime('%Y-%m-%d %H') # 一小时内使用的日志文件都是同一个 - FileLogger = logging.handlers.RotatingFileHandler(filename=f'./bin/log/{log_name}.log', - maxBytes=102400, - backupCount=5) # 每个日志文件最大102400字节(100Kb) - FileLogger.setFormatter(formatter_file) - _logger.addHandler(ConsoleLogger) - _logger.addHandler(FileLogger) + file_logger = logging.handlers.RotatingFileHandler(filename=f'./bin/log/{log_name}.log', + maxBytes=102400, + backupCount=5, + encoding='utf-8') # 每个日志文件最大102400字节(100Kb) + file_logger.setFormatter(formatter_file) + _logger.addHandler(console_logger) + _logger.addHandler(file_logger) return _logger if __name__ != '__main__': - logger = Logger().set_logger() + logger = MakeLogger().setup_logger()