log与logging模块
Log
是一种可以追踪某些软件运行时所发生事件的方法。
软件开发人员可以向它们的代码中调用日志记录相关的方法来表明发生了某些事情。一个事情可以用一个包含可选变量数据的消息来描述。此外,事件也有重要性的概念,这个重要性也可以被称为严重性级别(level)
日志的作用可以简单总结为以下3点:
1、程序调试
2、了解软件程序运行情况,是否正常
3、软件程序运行故障分析与问题定位。
如果应用的日志信息足够详细和丰富,还可以用来做用户行为分析,如:分析用户的操作行为、类型喜好、地域分布以及其它更多的信息,由此可以实现改进业务、提高商业利益。
日志等级
思考两个问题:
作为开发人员,在开发一个应用程序时需要什么日志信息?
(应该将应用程序所有的运行日志记录下来进行分析,但这是十分耗费机器性能的)
在应用程序上线后需要什么日志信息?
(通常只需要记录应用程序的异常信息、错误信息等,这样既可以减小服务器的I/O压力,也可以避免我们在排查故障时被淹没在日志的海洋里。)
日志等级可以帮助我们在不改动应用程序代码的情况下实现在不同环境记录不同详细程度的日志。
logging 模块
python的logging模块提供了通用的日志系统,可以方便第三模块或者应用使用。
是python自带的一个包,无需安装,直接import即可。
- 日志等级(从下往上是越来越严重的意思)
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
当为某个应用程序指定一个日志级别后,应用程序会记录所有日志级别大于或等于指定日志级别的日志信息。
logging模块的四大组件
- logger:提供日志接口,供应用代码使用。
- handler:将日志记录(log record)发送到合适的目的地(destination)。
- filter:提供一种优雅的方式决定一个日志记录是否发送到handler。
- formatter:指定日志记录输出的具体格式。
logging模块定义的模块级别的常用函数
- logging.basicConfig()
对root logger 进行一次性配置。 - logger.debug()
创建一条严重级别为DEBUG的日志记录。 - logger.info()
创建一条严重级别为INFO的日志记录。 - logger.warning()
- logger.error()
- logger.critical()
我们可以利用logging模块的四大组件和logging模块的函数两种方法来做日志的配置。
import logging
logging.basicConfig(level=logging.WARNING,filename='log.txt',format='%(asctime)s %(message)s',filemode='w')
# 会输出级别为WARNING及以上的信息
logger.debug('this is debug message.')
logger.info('this is info message.')
logger.warning('this is warning message.')
logger.error('this is error message.')
logger.critical('this is critical message.')
备注:
1、初始化
logger=logging.getLogger('name1'),getLogger()方法后最好加上日志记录的模块名字,
后面的日志格式中的%(name)s对应的是这里的模块名字。
2、设置级别
3、Handler ,常用的是StreamHandler和FileHandler,windows下可以简单理解为一个是Console和文件日志,
一个打印在cmd窗口上,一个记录在一个文件上。
4、formatter,定义了最终Log信息的顺序、结构和内容
'[%(asctime)s][%(levelname)s]%(message)s','%Y-%m-%d %H:%M:%S'
%(name)s --Logger的名字
%(levelname)s --文本形式的日志级别
%(message)s --用户输出的信息
%(asctime)s --字符串形式的当前时间