程序员 需要用日志记录程序的运行情况,以清楚地了解发生了哪些事件,在哪个位置,出现了那些错误;Python自带的标准库有日志模块,可直接调用;
1.手动debug 需要加很多print函数,解决完bug又要删掉,很麻烦,所以引入了logging模块;在logging模块里,可以通过设置日志等级来决定要不要输出;
例如:
import logging
logging.basicConfig(level=logging.DEBUG) #日志等级为:DEBUG ;有输出;
# logging.basicConfig(level=logging.INFO) #日志等级为:INFO ;无输出;
result1 = '第一个函数运行OK'
logging.debug(result1)
result2 = '第二个函数运行OK'
logging.debug(result2)
result3 = '第三个函数运行OK'
logging.debug(result3)
result4 = '第四个函数运行OK'
logging.debug(result4)
result5 = '第五个函数运行OK'
logging.debug(result5)
提示:以下是本篇文章正文内容;
第一阶段——基本使用
1.日志等级
日志级别: DEBUG < INFO<WARNING<ERROR<CRITICAL
注意:如果设置的日志等级是 WARNING ; 那么大于等于WARNING级别的日志信息都会输出;
2.Format格式
3. 例子
import logging
# 设置输出的格式
LOG_FORMAT = "时间:%(asctime)s - 日志等级:%(levelname)s - 日志信息:%(message)s"
# 对logger进行配置——日志等级&输出格式&日志输出文件
logging.basicConfig(level=logging.WARNING, format=LOG_FORMAT, filename='my.log')
'''
注意:logging.basicConfig() 这个函数只能有一个, 如果写了多条只有第一条会生效;
如果不把日志保存在某个文件里,电脑/程序/编辑器 有一个关了,就会丢失日志;
# 设置不同level的日志 输出不同message
logging.debug("This is a debug log")
logging.info("This is a info log")
logging.warning("This is a warning log")
logging.error("This is a error log")
logging.critical("This is a critical log")
第二阶段——进阶使用
1.模块化组件
利用组件,达到灵活配置日志器的作用;
组件间的关系:
2.模块化组件的使用
使用步骤:
1.创建一个logger对象;
2.定义一个handler,它决定日志发到哪里去;
常用的有:
SteamHandler ——> 输出到控制台 ;
FileHandler ——> 输出到文件 ;
3.设置日志级别和输出格式;
4.把handler添加到对应的logger里;
3.例子
例子1: 一个 logger 对应一个 Handler ;
import logging # 1.创建一个logger(日志记录器)对象,设置记录器名字; my_logger = logging.Logger("first_logger") # 2.定义handler(日志处理器),决定把日志发到哪里; my_handler = logging.FileHandler('test.log') # 3.设置日志级别(level)和输出格式Formatters(日志格式器); my_handler.setLevel(logging.INFO) my_format = logging.Formatter("时间:%(asctime)s 日志信息:%(message)s 行号:%(lineno)d") # 把handler添加到对应的logger中去。 my_handler.setFormatter(my_format) my_logger.addHandler(my_handler) # 使用: my_logger.info("我是日志组件")
例子2: 一个 logger 对应两个 handler ;
import logging # 创建一个logger(日志记录器)对象; my_logger = logging.Logger("first_logger") # 第一个日志处理器 my_handler = logging.FileHandler('test.log') my_handler.setLevel(logging.INFO) my_format = logging.Formatter("时间:%(asctime)s 日志信息:%(message)s 行号:%(lineno)d") my_handler.setFormatter(my_format) my_logger.addHandler(my_handler) # 第二个日志处理器 you_handler = logging.StreamHandler() you_handler.setLevel(logging.DEBUG) you_format = logging.Formatter("时间:%(asctime)s 日志信息:%(message)s 行号:%(lineno)d 这是StreamHandler") you_handler.setFormatter(you_format) my_logger.addHandler(you_handler) # 使用: my_logger.info("我是日志组件")