# 日志的处理
# 1、记录的信息不全面,比如没有记录时间信息、没有执行人信息、日志等级信息、日志详细信息
# 2、文件记录的信息混乱不清,不方便使用脚本统计
# 3、当日志文件大的时候,没有自动进行日志轮转功能
# 引出 日志器
# 日志信息
# 日志收集器(Logger),用来装日志信息
# 日志收集器的日志等级(NOTSET(0)、DEBUG(10)、INFO(20)、WARNING(30)、ERROR(40)、CRITICAL(50))
# NOTSET(0):无限制,只要是日志信息都可以收集
# DEBUG(10):只收集等级大于 DEBUG 的日志信息(不收集 NOTSET)
# INFO(20):只收集等级大于 INFO 的日志信息(不收集 NOTSET、DEBUG)
# WARNING(30):只收集等级大于 WARNING 的日志信息
# ERROR(40):只收集等级大于 ERROR 的日志信息
# CRITICAL(50):只收集日志等级为 CRITICAL 的日志信息
# 日志等级比当前设置的等级高的都能收集,而比设置的等级低的都不能收集
# 日志输出渠道(Handler):console终端、文件、smtp邮件、http
# 日志输出渠道的日志等级:
# 日志等级比当前设置的等级高的都能输出,而比设置的等级低的都不能输出
# 日志的显示格式(Formatter)
# 操作步骤
import logging
# 是 python 自带的模块,
# 如果不定义日志器,会使用默认的root根日志器来进行收集。使用的日志等级为 WARNING
# 1、定义日志收集器
case_logger = logging.getLogger('case')
# logging.getLogger() 的第一个参数name如果为空,默认使用的还是root根日志收集器,所以需要传一个值
# 返回 Logger 对象
# 2、指定日志收集器的日志等级(NOTSET、DEBUG、INFO、WARNING、ERROR、CRITICAL)
case_logger.setLevel(logging.DEBUG)
# 3、定义日志输出渠道
# 可以指定多个渠道(console终端、文件 等)
# 输出到 console 终端
console_handle = logging.StreamHandler()
# 输出到文件
file_handle = logging.FileHandler('case.log', encoding='utf-8')
# 4、指定日志输出渠道的日志等级
# 如果都不能够被日志收集器收集到的日志,那么一定没办法输出到渠道中
console_handle.setLevel(logging.ERROR)
# console_handle.setLevel('ERROR') # 也可以使用字符串的形式直接赋值
file_handle.setLevel('INFO')
# 5、定义日志显示的格式
simple_formatter = logging.Formatter('%(asctime)s - [%(levelname)s] - [日志信息]:%(message)s') # 简单日志格式
verbose_formatter = logging.Formatter(
'%(asctime)s - [%(levelname)s] - %(module)s - %(name)s - %(lineno)d - [日志信息]:%(message)s') # 复杂日志格式
# 设置终端的日志格式:简单格式
console_handle.setFormatter(simple_formatter)
# 设置文件的日志格式:复杂格式
file_handle.setFormatter(verbose_formatter)
# %(asctime)s 日志产生的时间
# %(levalname)s 日志等级
# %(module)s 当前 py 文件的名称
# %(message)s 日志具体信息
# %(name)s 日志收集器的名称
# %(lineno)d 行数
# 格式是 %()s 中间加上一个变量,变量名是固定的
# 6、对接。将日志收集器和输出渠道对接
case_logger.addHandler(console_handle)
case_logger.addHandler(file_handle)
if __name__ == '__main__':
case_logger.debug('这是 debug 级别的日志。')
case_logger.info('这是 info 级别的日志。')
case_logger.warning('这是 warning 级别的日志。')
case_logger.error('这是 error 级别的日志。')
case_logger.critical('这是 critical 级别的日志。')
原文地址:https://www.cnblogs.com/testyuz/p/12169204.html
时间: 2024-11-07 16:13:53