文章目录
logging模块学习
日志模块:
为了打印日志信息的模块。
import logging
#测试日志信息
logging.debug("debug message");
#信息日志信息
logging.info("info message");
#警告日志信息
logging.warn("warn message");
#错误日志信息
logging.error("error message");
#严重错误日志信息
logging.critical("critical message");
只有日志信息级别为WARNING,logging模块才将日志打印到屏幕上。(即只有日志级别高于WARNING的日志才会输出)
日志级别及设置
级别 | 何时使用 |
---|---|
DEBUG | 详细信息,典型地调试问题时会感兴趣。 |
INFO | 证明事情按预期工作。 |
WARNING | 表明发生了一些意外,或者不久的将来会发生问题(如‘磁盘满了’)。软件还是在正常工作。 |
ERROR | 由于更严重的问题,软件已不能执行一些功能了。 |
CRITICAL | 严重错误,表明软件已不能继续运行了。 |
对日志的简单配置:
import logging
#logging模块的基础设置,filename为日志打印文件(没有会创建一个文件),level为日志等级。
logging.basicConfig(filename="logger.log", level=logging.INFO)
#basicCondig的level设置的是logging的最大等级,也就是这里的等级大于INFO的都输出
logging.debug("debug message");
logging.info("info message");
logging.warn("warn message");
logging.error("error message");
logging.critical("critical message");
设置了基础设置函数后,不会在命令框显示日志。而是会打印到文件中。
记录器、处理器、过滤器、格式化器
- logger:记录器。产生日志信息,错误时会显示应用程序代码的接口。
- handler:处理器。将处理器产生的日志记录发送到合适的目的地。
- filter:过滤器。过滤日志信息。
- formatter:格式化器。指明了日志格式。
它们之间的关系如下:
记录器Logger
记录器logger是一个树形结构容器。在使用接口debug、warn、error、critical之前必须创建一个Logger实例。否则创建的是root logger,默认:日志级别(warn),处理器(StreamHandler),信息打印在屏幕上,格式化器(默认格式化输出)
# 创建方法
logger = logging.getLogger(logger_name)
修改记录器信息:
- logger.setLevel(logging.ERROR):设置处理器日志级别。
- logger.addHandler(handler_name):给记录器增加一个处理器。
- logger.removeHandler(handler_name):删除记录器中的一个处理器。
处理器Handler
常见的处理器有:
- StreamHandler
- FileHandler
StreamHandler
# 创建方法
streamHandler = logging.StreamHandler(stream=None)
有以下方法:
- streamHandler.setLevel(logging.WARN):指定日志级别。
- streamHandler.setFormatter(formatter_name):设置一个格式化器。
- streamHandler.addFilter(filter_name):添加一个过滤器。
- streamHandler.removeFiltert(filter_name):删除一个过滤器。
FileHandler
# 创建方法
fileHandler = logging.FileHandler(filename, mode="a", encoding=None, delay=False)
格式化器Formatter
格式化器对输出日志信息做格式规范。规定了日志信息的规则、格式、内容。
# 创建方法
formatter = logging.Formatter(fmt=None, datefmt=None)
fmt是消息的格式化字符串。datefmt是日期的格式化字符串。默认fmt使用‘%(message)s’、默认datefmt使用ISO8601日期格式。
日志配置
-
显式创建记录器Logger、处理器Handler和格式化器Formatter,并进行相关设置;
-
通过简单方式进行配置,使用 basicConfig() 函数直接进行配置;
-
通过配置文件进行配置,使用 fileConfig() 函数读取配置文件;
-
通过配置字典进行配置,使用 dictConfig() 函数读取配置信息;
-
通过网络进行配置,使用 listen() 函数进行网络配置。
basicConfig参数信息:
关键字 | 描述 |
---|---|
filename | 创建一个FileHandler,使用指定的文件名,而不是使用StreamHandler。 |
filemode | 如果指明了文件名,指明打开文件的模式(如果没有指明filemode,默认为’a’)。 |
format | handler使用指明的格式化字符串。 |
datefmt | 使用指明的日期/时间格式。 |
level | 指明根logger的级别。 |
stream | 使用指明的流来初始化StreamHandler。该参数与’filename’不兼容,如果两个都有,'stream’被忽略。 |
有用的format格式
格式 | 描述 |
---|---|
%(levelno)s | 打印日志级别的数值 |
%(levelname)s | 打印日志级别名称 |
%(pathname)s | 打印当前执行程序的路径 |
%(filename)s | 打印当前执行程序名称 |
%(funcName)s | 打印日志的当前函数 |
%(lineno)d | 打印日志的当前行号 |
%(asctime)s | 打印日志的时间 |
%(thread)d | 打印线程id |
%(threadName)s | 打印线程名称 |
%(process)d | 打印进程ID |
%(message)s | 打印日志信息 |