1. 简介
使用场景
日志的严重程度
由高到低
Level |
---|
CRITICAL |
ERROR |
WARNING |
INFO |
DEBUG |
logging默认的严重程度是WARNING,即在这个严重程度或以上的日志才会被记录。
有两种常用的记录日志的方式:
- 输出到终端
import logging
logging.error('hello')
- 记录到文件,也就是硬盘
import logging
logging.basicConfig(filename='./log.log',level=logging.DEBUG)
logging.error('hello')
basicConfig方法用于快速设置日志,有下面的参数:
- filename 包日志保存到哪个文件
- filemode记录日志的模式,a代表在文件中追加日志,w是删除原有文件,创建新文件。
- format 设置日志IDE输出格式,
- level 日志的严重程度,
- datefmt 日期格式
- stream 日志输出到那里,如果有filename参数,忽略改参数
logging中包含了四个主要的类: - logger提供应用程序直接使用的接口
- handler将日志记录到指定的输出,例如文件或终端
- filter提供了对日志进行过滤的功能
- formatter决定日志记录的最终输出格式
2. logger
- 命名空间
每一个logger都会有一个名字。名字中使用点号来进行等级管理。例如scan
是scan.html
和scan.pdf
的上级
logging中建议使用logger=logging.getLogger(__name__)
来获取logger,因为__name__
代表当前模块的路径 - 日志流
当应用程序执行一个写日志操作时,例如logging.info()
,日志流程图
如果logger有父类,日志流会同时发送给logger和logger的父类handler
allot_logger('scan','./scan.log')
allot_logger('scan.pdf', './scan.pdf.log')
scan_log = logging.getLogger('scan')
scan_pdf_log = logging.getLogger('scan.pdf')
scan_log.info('scan_log') # 日志只会输出到./scan.log文件
scan_pdf_log.info('scan_pdf_log') # 日志会输出到./scan.log和./scan.pdf.log两个文件
1.方法
- Logger.setLevel()设置日志严重程度
- logger.addHandler(),Logger.remoteHandler()添加或删除Handler
- Logger.addFilter,Logger.remoteFilter()添加或删除Filter
- Logger.debug(), Logger.info(), Logger.warning(), Logger.error(), and Logger.critical()记录日志,其中debug是日志等级。支持字符串格式化,例如
logging.debug('error_msg:%s',error_msg)
- Logger.log(level,msg)。
logging.log(logging.WARN,'msg')
等于logging.warn(msg)
2.属性
- Logger.handlers 该logger已添加Handlers
- Logger.filters 该logger已添加Filters
- 1.获取Logger实例
通过getLogger()来获取logger
3.Handler
一个logger可以设置0个或以上的Handler。logger执行记录日志的方法后,会把日志交给Handler来处理。
1.方法
- Handler.setLevel() 设置logger的日志严重程度
- Handler.addFilter,Handler.remoteFilter()添加或删除Filter
- setFormatter() 设置日志输出的格式
2.Handler类
1.logging.StreamHandler
输出日志到一个文件对象,可以是open打开的文件,也可以是系统终端,例如sys.stdout或sys.stderr。他的构造函数是StreamHandler([strm])
参考博客:Python LOGGING使用方法