# -*- coding: utf-8 -*-
# @Author : 107
# @File : logdriver.py
# @explain : 日志
import logging
import logging.config
import os
import time
class LogDriver:
def __init__(self, log_path=None):
"""
:param log_path: 日志存储路径
"""
if log_path:
self.log_path = log_path
else:
self.BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# self.today = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
self.today = time.strftime("%Y-%m-%d", time.localtime(time.time()))
self.log_path = os.path.join(self.BASE_DIR, "logs", self.today)
if not os.path.exists(self.log_path):
os.makedirs(self.log_path)
self.logger = self.__config()
def __config(self):
_ = self
"""
formatters:
%(asctime)s -> 时间
%(msecs)s -> 毫秒
%(thread)s -> 进程号
%(filename)s -> 文件名
%(levelname)s -> 日志等级
%(lineno)s -> 哪一行错了
%(funcName)s -> 函数名
%(message)s -> 报错信息
"""
config = {
'version': 1,
'formatters': {
'log_format': {
'format': '[%(asctime)s.%(msecs)d] [%(levelname)s] [ %(filename)s -> %(lineno)d] [%(message)s]',
'datefmt': '%Y-%m-%d %H:%M:%S'
},
},
'filters': {
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'log_format'
},
'default': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 将日志消息发送到磁盘文件,并支持日志文件按大小切割
'filename': os.path.join(self.log_path, "log.log"), # 日志输出文件
'maxBytes': 1024 * 1024 * 5, # 文件大小
'formatter': 'log_format', # 使用哪种formatters日志格式
'backupCount': 1,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
'zhang3': {
'handlers': ['default', 'console'],
'level': 'DEBUG',
'propagate': True
}
}
}
logging.config.dictConfig(config)
logger = logging.getLogger('zhang3')
return logger
if __name__ == "__main__":
logger = LogDriver().logger
# logger.info("info")
# logger.error("error")
# logger.debug("debug")
# try:
# a = 0 / 0
# except Exception as e:
# logger.exception(e)
# logger.warning("warning")
# logger.critical("critical")