logging模块是Python内置的标准模块,主要用于输出脚本运行日志,可以设置输出日志的等级、日志保存路径等。
日志
日志是一种可以追踪某些软件运行时所发生事件的方法。
软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情。一个事件可以用一个可包含可选变量数据的消息来描述。此外,事件也有重要性的概念,这个重要性也可以被称为严重性级(level)。
五个级别
其中Logging一共有五种级别,依次是DEBUG < INFO < WARNING < ERROR < CRITICAL
# @Author:Runsen
#引入了 logging 模块
import logging
LOG_FORMAT = "%(asctime)s----%(name)s----%(levelname)s----%(message)s"
#level 配置为 WARNING 信息,即只输出 WARNING 级别及其以上的信息,
# format指定了 format 格式的字符串,包括asctime运行时间 name模块名称、levelname(日志级别)message (日志内容)
logging.basicConfig(level=logging.WARNING,format=LOG_FORMAT)
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")
具体输出如下。
2020-10-31 12:15:13,181----WARNING----This is a warning log
2020-10-31 12:15:13,181----ERROR----This is a error log
2020-10-31 12:15:13,182----CRITICAL----This is a critical log
为什么DEBUG和INFO的信息没有输出?
因为我们在全局配置的时候设置了输出为 WARNING 级别,所以 DEBUG和INFO 级别的信息就被过滤掉了。
日志信息的输出格式
在basicConfig 的format参数指定日志信息的输出格式。
logging模块
logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件和回滚等;
可以说,logging模块主要由4部分组成,分别是Logger,Handler,Filters和Formatter。
模块化组件使用
模块化组件使用流程:
- 创建一个logger(日志处理器)对象
- 定义handler(日志处理器),决定把日志发到哪里。常用的有StreamHandler,输出到控制台。FileHandler输出到文件。
- 设置日志级别(level)和输出格式Formatters(日志格式器)
- 把handler添加到对应的logger中去
- 日志输出
具体示例代码如下:
'''
@Author:Runsen
@Wechat:RunsenLiu
'''
'''
@Author:Runsen
@Wechat:RunsenL
'''
import os
import time
import logging
# 第一步、创建一个logger(日志处理器)对象
logger = logging.getLogger("%s_log" % __name__)
logger.setLevel(logging.INFO)
# 第三步、定义handler(日志处理器),决定把日志发到哪里。这里设置FileHandler输出到文件。
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
# 在当前路径下新建logs文件夹
if os.path.exists("Logs"):
pass
else:
os.mkdir("Logs")
log_name = "./Logs/"+ rq + '.log'
print(log_name)
# a模式追加
handler = logging.FileHandler(log_name, mode='w')
handler.setLevel(logging.WARNING)
# 第三步、设置日志级别(level)和输出格式Formatters(日志格式器)
formatter = logging.Formatter("%(asctime)s----%(filename)s----[line:%(lineno)d]----%(levelname)s:%(message)s")
handler.setFormatter(formatter)
# 第四步、把handler添加到对应的logger中去
logger.addHandler(handler)
# 第五步、日志输出
logger.debug('this is a logger debug message')
logger.info('this is a logger info message')
logger.warning('this is a logger warning message')
logger.error('this is a logger error message')
logger.critical('this is a logger critical message')
具体的Logs文件夹中Log文件内容如下。