Logging 模块

本文深入解析了日志框架的核心组件,包括Logger、LogRecord、Handler、Formatter和Filter的功能与使用。通过实例展示了如何配置日志级别、输出格式,并介绍了日志信息的结构,包括事件时间、位置、严重程度和内容。

Logging 框架:

名称属性备注
Logger生成器即Logger Main Class,是我们进行日志记录时创建的对象,我们可以调用它的方法传入日志模板和信息,来生成一条条日志记录,称作Log Record。
Log Record日志记录就代指生成一条条日志记录
Handler处理器即用来处理日志记录的类,它可以将Log Record 输出到我们指定的日志位置和存储形式等,如我们可以指定将日志通过FTP协议记录到远程的服务器上,Handler就会帮我们完成这些事。
Formatter格式化处理器实际上生成的Log Rceord 也是一个个对象,那么我们想要把它们保存成一条条我们想要的日志文本的话,就需要有一个格式化的过程,那么这个过程就由Formatter来完成,返回的就是日志字符串, 然后传回给Handler处理。
Filter过滤器另外保存日志的时候我们可能不需要全部保存,我们可能只需要保存我们想要的部分就可以了,所以保存前还需要进行一下过滤,留下我们想要的日志,如只保存某个级别的日志,或只保存包含某个关键字的日志等,那么这个过程就交给Filter来完成。
Parent Handler父级处理器Handler 之间可以存在分层关系, 以使得不同Handler之间共享相同功能的代码。

 

一条日志信息对应的是一个事件的发生,而一个事件通常需要包括以下几个内容

  1,事件发生时间

  2,事件发生位置

  3,事件的严重程度——日志级别

  4,事件内容

 

Logging 实例:

import logging     #引入logging 模块

logging.basicConfig(            #通过basicConfig设置基本配置
    level=logging.INFO,         # level 配置 Info 级别
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')    #输出Info级别信息format格式的字符串
    # 四个内容分别代表 时间、模块名称、日志级别、日志内容
logger = logging.getLogger(__name__)        #声明 一个Logging对象  括号内的是 name 的值

logger.info('This is a log info')  #括号内的是 message 的 值
logger.debug('Debugging')
logger.warning('Warning exists')
logger.info('Finish')

输出结果:

2018-10-18 21:04:14,954 - __main__ - INFO - This is a log info
2018-10-18 21:04:14,954 - __main__ - WARNING - Warning exists
2018-10-18 21:04:14,954 - __main__ - INFO - Finish

 ps:因为我们在全局配置的时候设置了输出为Info 级别,所以Debug 级别的信息就被过滤掉了。

 

Level 级别:

等级数值属性
Notset0不设置
Debug10调式信息
Info20常规信息
Warning30警告信息
Warn30警告信息
Error40错误信息
Fatal50严重错误
Critical50毁灭错误

 

BasiConfig的参数:

名称属性
filename即日志输出的文件名
filemode指定日志文件的写入方式,(两种形式 w  a )
format指定 日志信息的输出格式
datefmt指定时间的输出格式
style如果format参数指定了,这个参数就可以指定格式化时的占位符风格,如%、{、$等。
level指定日志输出的类别,程序会输出大于此级别的信息
stream在没有指定filename的时候会默认使用SteamHandler,这时stream可以指定初始化的文件流
handlers可以指定日志处理时所使用的Handlers,必须时可迭代的

  

foumat的部分参数如下:

%(levelname)s 打印日志级别的名称
%(asctime)s打印日志的时间
%(module)s打印模块名称
%(message)s打印日志信息
%(funcName)s打印日志的时间
%(lineno)s打印日志的当前行号
%(levelno)s打印日志级别的数值
%(pathname)s打印当前程序的路径,其实就是sys.argv[0].
%(filename)s打印当前执行程序名
%(thread)s打印线程ID
%(threadName)s打印线程名称
%(process)s打印进程ID
%(prcessName)打印进程名称

ps:黑体加黑 常用

 

 

实例如下:

import logging

logging.basicConfig(level=logging.DEBUG,
                    filename='output.log',
                    datefmt='%Y/%m/%d %H:%M:%S',
                    format='%(asctime)s - %(name)s - %(levelname)s - %(lineno)d - %(module)s - %(message)s')
logger = logging.getLogger(__name__)

logger.info('This is a log info')
logger.debug('Debugging')
logger.warning('Warning exists')
logger.info('Finish')

输出结果为:

2018/10/18 21:35:19 - __main__ - INFO - 79 - 模块 - This is a log info
2018/10/18 21:35:19 - __main__ - DEBUG - 80 - 模块 - Debugging
2018/10/18 21:35:19 - __main__ - WARNING - 81 - 模块 - Warning exists
2018/10/18 21:35:19 - __main__ - INFO - 82 - 模块 - Finish

logging 模块的 Formatter,Handler,Logger,Filter 对象

#logger:产生日志的对象

#Filter:过滤日志的对象

#Handler:接收日志然后控制打印到不同的地方,FileHandler用来打印到文件中,StreamHandler用来打印到终端

#Formatter对象:可以定制不同的日志格式对象,然后绑定给不同的Handler对象使用,以此来控制不同的Handler的日志格式

 

转载于:https://www.cnblogs.com/TF511/p/9813596.html

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值