一、日志作用
- 程序调试
- 了解程序运行是否正常
- 故障分析与问题定位
- 用户行为分析
二、日志的等级
DEBUG:最详细的日志信息,典型应用场景是问题诊断。
INFO:信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作。
WARNING:当某些不期望的事情发生时记录的信息,(如:磁盘可用空间较低),但是此时应用程序还是正常运行的
ERROR:由于一个严重的问题导致某些功能不能正常运行时记录的信息。
CRITICAL:当发生严重错误,导致应用程序不能继续运行时记录的信息。
三、logging模块常用的函数
四、logging的使用
- 方式一:使用logging提供的模块级别的函数
- 方式二:使用Logging日志系统的四大组件
示例:使用logging自带的函数
import logging
logging.basicConfig(level=logging.INFO)
logging.info("test_info")
logging.debug("test_debug")
logging.warning("test_waring")
logging.error("test_error")
五、logging模块的四大组件
- loggers【日志器】:提供应用程序直接使用的接口
- handles【 处理器】:将logger创建的日志记录发送到合适的目的输出(控制台输出or 磁盘文件输出,邮件)
- filters【过滤器】:提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其他的日志记录将会被忽略)
- formatters【格式器】:用于控制日志信息的最终输出格式
日志格式的输出:实际项目中我们会记录当前日志的时间,模块名称、模块中哪一个类的哪一行出错了等。
Handler类的说明:Handler对象的作用是(基于日志信息的level)将消息发送到handler指定的位置(文件、网络、邮件)
Logger类的下相关方法: logging.basicConfig()函数说明:
logging模块的格式字符串:
示例:basicConfig的使用:
my_format = '%(asctime)s-%(filename)s-%(module)s-%(lineno)d '
logging.basicConfig(
filename='my.log',
level=logging.INFO,
format=my_format
)
logging.info("info")
logging.debug("debug")
示例:使用logging的四大模块编写日志工具类
def my_log(name):
# 第一步:创建日志收集器
test_log = logging.getLogger(name=name)
# 第二步:创建日志收集渠道
pycharm = logging.StreamHandler() # 【控制台渠道】
file_log = handlers.TimedRotatingFileHandler(filename=log_dir, when="D", encoding="utf-8")
# 第三步:创建日志格式
fmt = '【%(asctime)s-%(name)s-%(levelname)s-%(pathname)s-%(lineno)d】: %(message)s'
log_format = logging.Formatter(fmt=fmt)
# 设置日志输出格式【渠道】
pycharm.setFormatter(fmt=log_format)
file_log.setFormatter(fmt=log_format)
# 设置日志级别【收集器】
test_log.setLevel(logging.INFO)
# test_log.setLevel(logging.WARNING)
# 收集器绑定渠道
test_log.addHandler(pycharm)
test_log.addHandler(file_log)
return test_log