说明:
logging提供了一组便利的函数,用来做简单的日志。它们是 debug()、 info()、 warning()、 error() 和 critical()。
logging函数根据它们用来跟踪的事件的级别或严重程度来命名。标准级别及其适用性描述如下(以严重程度递增排序)
实际使用中可以设置等级来方便获取日志,eg:level=logging.DEBUG
输出到屏幕
logging库采取了模块化的设计,提供了许多组件:记录器、处理器、过滤器和格式化器。
- Logger 暴露了应用程序代码能直接使用的接口。
- Handler将(记录器产生的)日志记录发送至合适的目的地。
- Filter提供了更好的粒度控制,它可以决定输出哪些日志记录。
- Formatter 指明了最终输出中日志记录的布局。
常用的记录器对象的方法分为两类:配置和发送消息。
这些是最常用的配置方法:
Logger.setLevel()指定logger将会处理的最低的安全等级日志信息
Logger.addHandler()和Logger.removeHandler()从记录器对象中添加和删除处理程序对象。处理器详见Handlers
Logger.addFilter()和Logger.removeFilter()从记录器对象添加和删除过滤器对象。
logging.StreamHandler -> 控制台输出
配置方法:
setLevel()
方法和日志对象的一样,指明了将会分发日志的最低级别。为什么会有两个setLevel()
方法?记录器的级别决定了消息是否要传递给处理器。每个处理器的级别决定了消息是否要分发。setFormatter()
为该处理器选择一个格式化器。addFilter()
和removeFilter()
分别配置和取消配置处理程序上的过滤器对象。
# 定义一个Handler打印INFO及以上级别的日志到sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
console.setFormatter(formatter)
formatter = logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
# 将定义好的console日志handler添加到root logger
logging.getLogger('').addHandler(console)
输出到文件
利用logging.basicConfig()保存log到文件
logger = logging.getLogger()
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(lineno)d - %(levelname)s: %(message)s',
datefmt='%m-%d %H:%M',
filename='log.txt', #文件内容
filemode='w' #w覆盖写入,a继续写入)
try:
2/0
except Exception as e:
logger.error(logging.info(e), exc_info=True)
备注:
format中的那个变量是logging内置的keys,
asctime %(asctime)s 日志产生的时间,
lineno %(lineno)d 日志所针对的代码行号
levelname %(levelname)s 日志级别 ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
message %(message)s 具体的日志信息