python 日志文件

logging 模块是python中的一个标准库模块,有标准库模块提供日志记录API的关键好处是所有python模块都可以使用这个日志记录功能

日志级别

日志级别(level)描述
DEBUG最详细的日志信息,典型场景是问题诊断
INFO信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样工作
WARNNING

当某些不期望的事情发生的时记录的信息,但是此时程序还是在正常运行

ERROR由于一个更严重的问题导致某些功能不能正常运行的时候记录的信息
CRITICAL当发生严重错误的时候导致程序不能继续运行时记录的信息

日志实现

第一步,先创建生成日志文件的文件夹

# 获取存储日志的路径
cur_path = os.path.dirname(os.path.realpath(__file__))
log_path = os.path.join(os.path.dirname(cur_path), 'Data')
# 如果不存在日志文件夹,自动创建
if not os.path.exists(log_path):
    os.makedirs(log_path)

然后创建日志类

class Log:
    def __init__(self):
        # 文件命名
        self.logname = os.path.join(log_path, '%s.log' % time.strftime('%Y-%m-%d'))
        self.logger = logging.getLogger()
        self.logger.setLevel(logging.DEBUG)
        # 日志输出格式
        self.formatter = logging.Formatter('[%(asctime)s] - %(filename)s - %(levelname)s:%(message)s')

logging模块中格式字符串字段

字段/属性名称使用格式描述
asctime%(asctime)s日志时间发生的时间,人类可读时间,如:2020-10-02 18:00:20,394
created%(created)f日志发生的时间--时间戳,即调用time.time()函数返回的值
relativeCreated%(relativeCreated)d日志时间发生的时间相对于logging加载时间的相对毫秒数
msecs%(msec)d日志发生时间的毫秒部分
levelname%(levelname)s该日志记录的文字形式的日志级别('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
levelno%(levelno)s该日志记录的数字形式的日志级别(10, 20, 30, 40, 50)
name%(name)s所使用的日志器名称,默认是'root',因为默认使用的是 rootLogger
message%(message)s日志记录的文本内容,通过 msg % args计算得到的
pathname%(pathname)s调用日志记录函数的源码文件的全路径
filename%(filename)spathname的文件名部分,包含文件后缀
module%(module)sfilename的名称部分,不包含后缀
lineno%(lineno)d调用日志记录函数的源代码所在的行号
funcName%(funcName)s调用日志记录函数的函数名
process%(process)d进程ID
processName%(processName)s进程名称,Python 3.1新增
thread%(thread)d线程ID
threadName%(threadName)s线程名称

创建一个私有方法,实例化两个对象

    def __console(self, level, message):
        # 创建一个FileHandler对象用于写到本地的日志文件
        fh = logging.FileHandler(self.logname, 'a', encoding='utf-8')
        fh.setLevel(logging.DEBUG)
        fh.setFormatter(self.formatter)  # 设置日志输出格式
        self.logger.addHandler(fh)
        # 创建一个StreamHandler对象,用于输出到控制台
        ch = logging.StreamHandler()
        ch.setLevel(logging.DEBUG)
        ch.setFormatter(self.formatter) # 设置日志输出格式
        self.logger.addHandler(ch)

        if level == 'info':
            self.logger.info(message)
            self.logger.debug(message)
        if level == 'warning':
            self.logger.warning(message)
        if level == 'error':
            self.logger.error(message)
        # 这两行代码是为了避免日志输出重复问题
        self.logger.removeHandler(ch)
        self.logger.removeHandler(fh)
        fh.close()
    def debug(self, message):
        self.__console('debug', message)

    def info(self, message):
        self.__console('info', message)

    def warning(self, message):
        self.__console('warning', message)

    def error(self, message):
        self.__console('error', message)

    def get_log(self):
        return self.logger

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值