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