logging模块

logging模块

image

1、logging模块简介

# logging模块又叫日志模块
# 导入日志模块
import logging
import logging.config
# 1、日志分为五个等级
# 1、debug级别
logging.debug('debug级别')  # 级别为10
'''
debug级别是代码运行一行记录一行
'''
# 2、info级别
logging.info('info级别')  # 级别为20
'''
info级别则是记录产生的信息
'''
# 3、warning级别
logging.warning('warning级别')  # 级别为30
'''
warning级别记录程序的预警信息,日志默认的级别为warning级别
'''
# 4、error级别
logging.error('error级别')  # 级别为40
'''
error级别记录程序的异常信息
'''
# critical级别
logging.critical('critical级别')  # 级别为50
'''
critical级别记录程序出现重大事故的信息
'''
# 2、日志文件需要考虑的两点
'''针对日志模块需要考虑以下几点
    1、日志的产生位置
        终端(可以理解为直接在显示屏上显示)
        文件(写入文件中,只有打开文件时才能看到)
    2、日志的格式
        打印日志的格式,且不同的产生位置的打印格式不一样
'''

image

2、日志生成过程

# 3.1 logging对象
log = logging.getLogger('登录记录')
'''
logging对象主要负责产生日志信息
'''
# 3.2 filter对象:负责过滤对象。可以直接忽略
# 3.3 handler对象
hd1 = logging.FileHandler('a.txt', encoding='utf8')  # 产生文件
hd2 = logging.StreamHandler()  # 产生在终端的
'''
handler对象主要负责日志的产生位置
'''
# 3.4 formatter对象
fm1 = logging.Formatter(
    fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S %p',
)
fm2 = logging.Formatter(
    fmt='%(asctime)s - %(name)s %(message)s',
    datefmt='%Y-%m-%d',
)
'''
formatter对象主要负责日志的打印格式

生成日志的过程:
    产生日志>>>过滤日志>>>选择产生位置>>>日志格式化
'''
# 3.5 绑定handler对象
log.addHandler(hd1)
log.addHandler(hd2)
'''
绑定handler对象:日志名.addHandler(产生位置)
'''
# 3.6 绑定formatter对象
hd1.setFormatter(fm1)
hd2.setFormatter(fm2)
'''
绑定formatter对象:handler.setFormatter(格式1)
'''
# 3.7 设置日志等级
log.setLevel(30)  # 30为warning级别
# 3.8 记录日志
log.debug('日志信息')
'''
基于以上日志生成的过程,会发现我们每次要写的时候会很麻烦,
但是,生成日志有一个通用模板,下面就来说一下这个
'''

image

3、配置字典

# 4、配置字典
# 核心就在于CV
import logging
import logging.config
# 格式可以直接套用就好,如果有兴趣可以自行研究
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字

simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
# 日志文件产生的位置(文件),先在配置文件里配置好日志文件产生的文件路径
logfile_path = 'a3.log'
# log配置字典
'''即日志生成的过程,可以直接使用下面的通用模板,
核心在于cv,有兴趣的可以了解一下其内部的一些关键字,
会在文章末尾附上相关关键字的解释
'''

LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
    },
    'filters': {},  # 过滤日志
    'handlers': {
        #打印到终端的日志
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        #打印到文件的日志,收集info及以上的日志
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': logfile_path,  # 日志文件
            'maxBytes': 1024*1024*5,  # 日志大小 5M
            'backupCount': 5,
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
    },
    'loggers': {
        #logging.getLogger(__name__)拿到的logger配置  空字符串作为键 能够兼容所有的日志
        '': {
            'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'level': 'DEBUG',
            'propagate': True,  # 向上(更高level的logger)传递
        },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
    },
}
'''
以上就是日志配置信息,一般写在配置文件里
'''

image

4、日志调用

# 使用配置字典
logging.config.dictConfig(LOGGING_DIC)  # 自动加载字典中的配置
log1 = logging.getLogger('日志文件')
log1.debug('好好学习')
'''
由于日志文件在很多功能都要用得到,且要在不同地方重复调用,
因此,我们可以将其封装成函数写入公共功能里,任其他功能调用
'''

image

posted @ 2021-11-29 20:18  PyLy  阅读(72)  评论(0)    收藏  举报

念两句诗

入我相思门,知我相思苦,长相思兮长相忆,短相思兮无穷极。
【唐代】李白