一.为什么需要使用日志Logging模块,而不用print函数直接输出调试信息?
1.如用print函数输出日志信息,调试结束后需要一个个去注释删除,工作量很大,很容易出错
2.分不清哪些是调试输出,哪些是程序输出,清理日志输出容易搞错程序结构
日志消息的好处在于,你可以随心所欲地在程序中想加多少就加多少,稍
后只要加入一次logging.disable(logging.CRITICAL)调用,就可以禁止日志。
二.如何使用日志模块,输出到屏幕,输出到文件
输出到文件
logging.basicConfig(filename='myProgramLog.txt', level=logging.DEBUG, format='
%(asctime)s - %(levelname)s - %(message)s')
三.调试结束后,如何警用日志
logging.disable(logging.CRITICAL)
会警用低于logging.CRITICAL级别的日志,因此使用logging.CRITICAL会禁用全部日志,调试还可以部分警用,比如logging.WARNING,这样,ERROR和CRITICAL日志还是会输出。
日志使用总结:
1.优先级
级别 日志函数 描述
DEBUG logging.debug() 最低级别。用于小细节。通常只有在诊断问题时,你才会关心这些消息
INFO logging.info() 用于记录程序中一般事件的信息,或确认一切工作正常
WARNING logging.warning() 用于表示可能的问题,它不会阻止程序的工作,但将来可能会
ERROR logging.error() 用于记录错误,它导致程序做某事失败
CRITICAL logging.critical() 最高级别。用于表示致命的错误,它导致或将要导致程序完全停止工作
日志消息作为一个字符串,传递给这些函数。日志级别是一种建议。归根到底,还是由你来决定日志
消息属于哪一种类型
2.启用
import logging
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s\
- %(message)s')
输出到文件
logging.basicConfig(filename='myProgramLog.txt', level=logging.DEBUG, format='
%(asctime)s - %(levelname)s - %(message)s')
会输出级别高于 level=logging.DEBUG的日志,因此 level=logging.DEBUG会输出全部日志
输出到文件,文件以当前时间为文件名:
import datetime
import logging, sys, traceback
datetimeNow = datetime.datetime.now()
datatimeStr = datetimeNow.strftime("%d-%m-%Y-%H-%M-%S")
# 将日志写入文本
logging.basicConfig(filename='{}.txt'. format(datatimeStr), filemode='w', level=logging.DEBUG, format='\
%(asctime)s - %(levelname)s - %(message)s')
# 禁用日志,禁用优先级低于CRITICAL的日志
'''日志有五种优先级,优先级从低到高依次为:
DEBUG
INFO
WARNING
ERROR
CRITICAL
警用日志会警用低于指定优先级的日志,如下使用logging.CRITICAL,因所有优先级都低于
CRITICAL,因此logging.disable(logging.WARNING)会禁用全部日志
不禁用时只需注释掉如下这行即可
'''
#logging.disable(logging.DEBUG)
3.警用
logging.disable(logging.CRITICAL)
使用logging.CRITICAL会禁用全部日志
问题如何将异常输出到日志文件中,或者如何将异常单独输出的错误文件中:
1.将异常输出到日志文件中
try:
xxxx
except Exception as err:
logging.exception(err)#将异常写入日志
2.将异常单独输出到错误文件中
import traceback
try:
raise Exception('This is the error message.')
except Exception
errorFile = open('errorInfo.txt', 'w')
errorFile.write(traceback.format_exc())#将异常输出到单独的错误文件
errorFile.close()
备注:使用了两个模块库
logging和traceback,相关的使用可以使用pydoc查询
CMD:
python -m pydoc -p 1551
Server ready at http://localhost:1551/
Server commands: [b]rowser, [q]uit
server> b
然后查找这两个模块
logging (version 0.5.1.2, 07 February 2010)
参考:Python编程快速上手——让繁琐工作自动化(异步图书) Chapter 10.4