一.日志模块级别
级别 | 说明 |
---|---|
DEBUG | 输出详细的运行情况,主要用于调试 |
INFO | 确认一切按预期运行,一般用于输出重要运行情况 |
ERROR | 发生了错误,软件没能执行一些功能,还可以继续执行 |
WARNING | 一些意想不到的事情发生了(例如:“警告:内存空间不足”),但是这个软件还能按预期工作,在不久的将来会出现问题 |
CRITICAL | 一个严重的错误,表明程序本身可能无法继续运行 |
这5个等级,也分别对应5种打日志的方法:debug、info、warning、error、critical,默认的是warning。当在warning或之上时才被跟踪。
## 日志类型
- 文件形式
- 终端模式
## 日志的作用
- 出现问题以后,排查问题
- 定位问题
- 记录日志
## 实例
import logging
logging.debug("")
logging.info("")
logging.error("")
logging.warning("")
logging.critical("")
二.日志收集器
- 创建日志收集器 对象logging.getLogger
logger = logging.getLogger("py23")
#创建logger对象
logger.setLevel("DEBUG")
#指定logger对象手机的loggin信息等级
- loggin中默认的日志收集器为root,收集等级为Warning
实例
import logging
#得到root收集器
root_logger = logging.getLogger("python29")
#设置收集器的收集等级
root_logger.setLever("DEBUG")
#handler 输出处理器 ;StreamHandler 流xinxi
stream_handler = logging.StreamHandler()
stream_handler.setLever("DEBUG")
#把输出处理器添加到收集器里面
root_logger.addHandler(stream_handler)
root_logger.debug("DEBUG等级日志")
"""
打印结果:DEBUG等级日志
"""
#文件输出处理器 ,默认 moding ="a"
file_handler = logging.FileHandler("log.txt",encoding = "utf-8")
file.setLever("INFO")
root_logger.addHandler(file_handler)
logging.debug("debug等级日志")
logging.info("info等级日志")
logging.error("error等级日志")
logging.warning("warning等级日志")
"""
打印结果:
#同等级路径下会创建log.txt文件
info等级日志
error等级日志
warning等级日志
"""
三.日志输出格式
可以通过logging.Formatter指定日志的输出格式,这个参数可以输出很多有用的信息,如下:
- %(name)s:收集器名称
- %(levelno)s:打印日志级别的数值
- %(levelname)s:打印日志级别的名称
- %(pathname)s:打印当前执行的路径,其实就是sys.argv[0]
- %(filename)s:打印当前执行的程序名
- %(funcName)s:打印日志的当前函数
- %(lineno)d:打印日志的当前行号
- %(asctime)s:打印日志的时间
- %(thread)d:打印线程ID
- %(threadName)d:打印线程名称
- %(porcess)d:打印进程ID
- %(message)s:打印日志信息
工作中给的常用格式如下:
formats = '%(asctime)s - [%(filename)s -->line:%(lineno)d] - %(levelname)s:%(message)s'
这个格式可以输出日志的打印时间,是哪个模块的哪一行输出的,输出的日志级别是什么,以及输入的日志内容
#定义handler的log信息输出格式
formatter = logging.Formatter('%(asctime)s - %(filename)s - %(lineno)d - %(levelname)s:%(message)s')
#设置handler的log信息格式
fh.setFormatter(formatter)
sh.setFormatter(formatter)