import os
import time
import __init__
import logging
from logging.handlers import TimedRotatingFileHandler
app = __init__.app
log_path = app.config.get('LOG_PATH')
if not os.path.exists(log_path):
os.makedirs(log_path, mode=0o755, exist_ok=True)
log_file_route = log_path + '/' + str(time.strftime('%Y%m%d', time.localtime())) + '.log'
class DemoLogger:
def __init__(self, log_grade='NOTSET'):
# 打印日志等级以上
self.log_grade = log_grade
# 设置格式
self.formatter = logging.Formatter('{"timestamp":"%(asctime)s", '
'"program_route":"%(pathname)s", '
'"row":"%(lineno)d", '
'"level":"%(levelname)s", "message":"%(message)s"}',
'%Y-%m-%d %H:%M:%S')
# 打印到终端的格式
self.formatter_cmd = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
'%Y-%m-%d %H:%M:%S')
# 配置保存日志到文件的日志文件信息
self.time_rotating_handler = TimedRotatingFileHandler(log_file_route, when='d',
interval=1, backupCount=7,
encoding='utf8', delay=False)
def custom_get_logger(self):
# 创建一个日志器
logger = logging.getLogger()
# 设置日志输出的最低等级,低于当前等级则会被忽略
logger.setLevel(self.log_grade)
# 判断当前日志对象中是否有处理器,如果没有,则添加处理器
if not logger.handlers:
# 创建处理器:stream_handler为控制台处理器,time_rotating_handler为文件处理器
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(self.formatter_cmd)
self.time_rotating_handler.setFormatter(self.formatter)
# 将处理器,添加至日志器中
logger.addHandler(stream_handler)
logger.addHandler(self.time_rotating_handler)
return logger
if __name__ == '__main__':
logger = DemoLogger().custom_get_logger()
logger.error('测试')