python_日志相关

先看日志模块的代码逻辑图:
在这里插入图片描述

配上代码,助我加深理解:

# coding=utf-8
import logging
import time
from Common.function import project_path

# 单词:formatter格式器、handler处理程序、FileHandler文件内容处理程序
class FrameLog:
    """
    这里定义了日志输出的基本格式
    """
    def __init__(self, name=None):
        # 调用Framelog,user默认root、日志级别默认debug
        self.logger = logging.getLogger(name)
        self.logger.setLevel(logging.DEBUG)

        # handler定义了将日志发送到哪里,如:pycharm控制器、日志文件、邮件、短信等,
        # 创建一个handler,定义了将日志发送到文件,并设置了日志内容的格式、级别、
        self.log_name = f"{project_path()}/logs/" + time.strftime("%Y_%m_%d") + "_log.log"
        file = logging.FileHandler(self.log_name, "a", "utf-8")
        formatter = logging.Formatter('[%(asctime)s] %(filename)s-> %(funcName)s line:%(lineno)d [%(levelname)s]%(''message)s')
        file.setFormatter(formatter)
        file.setLevel(logging.DEBUG)

        # 再次创建一个handler,将日志发送到控制器(我用的是上面的格式器,你可以再这个handler里再自定义一个。)
        console = logging.StreamHandler(stream=None)
        console.setFormatter(formatter)  
        console.setLevel(logging.INFO)
        
        # 将2个处理器加入到logger中,不但向控制器输出、还想文件输出。
        self.logger.addHandler(file)
        self.logger.addHandler(console)
        
    def log(self):
        return self.logger


if __name__ == '__main__':
    # cgis模块,打印cgis-server模块的日志
    log = FrameLog('cgis-server').log()
    try:
        print(2/0)
    except ZeroDivisionError:
        print('这里打印在控制台')
        # 下面的message输入到日志
        log.error('这是一个框架性的错误11111111')
        log.debug('这是业务代码里的错误1111111111')
        log.info('这是业务代码里info级别的错误11111111111')
        log.critical('这是系统性的错误1111111')

    # fgis模块,打印fgis - server模块的日志
    log = FrameLog('fgis-server').log()
    try:
        print(2/0)
    except ZeroDivisionError:
        print('这里打印在控制台')
        # 下面的message输入到日志
        log.error('这是一个框架性的错误22222')
        log.debug('这是业务代码里的错误22')
        log.info('这是业务代码里info级别的错误2222')
        log.critical('这是系统性的错误222')

实际项目中,日志的定义都是通过配置文件实现的。请参考大佬

日志模块中是这么调用的:

# coding=utf-8
import logging
import logging.config
logging.config.fileConfig('log.conf')

logs = logging.getLogger('error')
logs.error('errorsssss')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_焦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值