Logging 模块

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 级别:

等级 数值 属性
Notset 0 不设置
Debug 10 调式信息
Info 20 常规信息
Warning 30 警告信息
Warn 30 警告信息
Error 40 错误信息
Fatal 50 严重错误
Critical 50 毁灭错误

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