import logging
#常用日志模块
#Logger:即 Logger Main Class,是我们进行日志记录时创建的对象,我们可以调用它的方法传入日志模板和信息,来生成一条条日志记录,称作 Log Record。
# Log Record:就代指生成的一条条日志记录。
# Handler:即用来处理日志记录的类,它可以将 Log Record 输出到我们指定的日志位置和存储形式等,如我们可以指定将日志通过 FTP 协议记录到远程的服务器上,Handler 就会帮我们完成这些事情。
# Formatter:实际上生成的 Log Record 也是一个个对象,那么我们想要把它们保存成一条条我们想要的日志文本的话,就需要有一个格式化的过程,那么这个过程就由 Formatter 来完成,返回的就是日志字符串,然后传回给 Handler 来处理。
# Filter:另外保存日志的时候我们可能不需要全部保存,我们可能只需要保存我们想要的部分就可以了,所以保存前还需要进行一下过滤,留下我们想要的日志,如只保存某个级别的日志,或只保存包含某个关键字的日志等,那么这个过滤过程就交给 Filter 来完成。
# Parent Handler:Handler 之间可以存在分层关系,以使得不同 Handler 之间共享相同功能的代码。
#第一部分
# logging.debug('debug message')
# logging.info('info ,message')
# logging.warning('warning message')
# logging.error('error message')
# logging.critical('critical message')
#logging的级别、权限 deubug与info级别不足 不打印
#默认只会打印下三个
#第二部分 创建日志 屏幕 文件二选一
# logging.basicConfig(level = logging.DEBUG,
# format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
# datefmt='%a,%d %b %Y %H:%M:%S',
# filename='test.log',
# #只要有filename就默认为文件存储 若没有直接显示在屏幕上
# filemode='w')
#修改配置
# logging.debug('debug message')
# logging.info('info ,message')
# logging.warning('warning message')
# logging.error('error message')
# logging.critical('critical message')
#结果:line对应程序的第几行 levelname指DEBUG、INFO等级别名 asctime对应datefmt filename可指路径
#Wed,14 Aug 2019 11:50:42 logger.py[line:22] DEBUG debug message
# Wed,14 Aug 2019 11:50:42 logger.py[line:23] INFO info ,message
# Wed,14 Aug 2019 11:50:42 logger.py[line:24] WARNING warning message
# Wed,14 Aug 2019 11:50:42 logger.py[line:25] ERROR error message
# Wed,14 Aug 2019 11:50:42 logger.py[line:26] CRITICAL critical message
#第三部分 同时创建文本与屏幕日志
logger=logging.getLogger()
#创建一个handler,用于写入日志文件
fh=logging.FileHandler('test,log')
#再创建一个handler,用于输出到控制台 文件对象 文件输出流 所以需要一个参数放文件
ch=logging.StreamHandler()
#屏幕对象
formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
#formatter 为输出格式
fh.setFormatter(formatter)
ch.setFormatter(formatter)
#为简便屏幕与文件公用一个输出格式,也可以不同
logger.addHandler(fh)
logger.addHandler(ch)
#若想仅文件输出可引掉这句 仅屏幕输出同理
logger.setLevel(logging.DEBUG)
#更改权限
logger.debug('debug message')
logger.info('info ,message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')