日志文件是记录程序操作及事件的记录文件或记录文件的集合。一般由程序开发人员编写,开发、运维人员共同使用,开发人员可以通过日志调试程序,运维人员通过日志检查程序近期是否正常运行,如果出现异常,则可通过日志快速定位问题。因此,用日志记录程序流程,事件,以及异常时的详细信息非常重要,尤其是对于部署在客户场地的程序。另外,日志有时也用于记录用户操作、程序运行地理位置等跟踪信息,用于后台的用户研究和数据挖掘。
日志文件需要详细、清晰、且具有高可读性,以便减少开发与运维人员后期的沟通成本,有时候我们也使用程序来检测和分析日志,因此,定义关键字和格式也很重要。
Python使用logging工具管理日志,日志可以在终端显示,也可以记录成文件,每条日志都用级别号标志其严重程度,一般通过级别过滤选择性地记录和显示日志,级别定义如表5-1所示:
(谢彦技术博客)
本例展示了以屏幕输出和文件输出两种方式记录日志信息,日志文件为当前目录下的log.txt,格式为文本文件。例程中设置了三次日志级别,第一次对程序中所有日志设置,级别为DEBUG,即显示全部日志,第二次设置日志文件的级别为INFO,它将INFO及INFO以上的日志记录在文件中,第三次是设置屏幕显示日志级别为WARNING,相当于先用第一次设置的DEBUG过滤一遍,再用WARNING过滤一遍,最终输出的是WARNING及以上的日志信息。
import logging
# 获取logger对象,取名mylog
logger = logging.getLogger("mylog")
# 输出DEBUG及以上级别的信息,针对所有输出的第一层过滤
logger.setLevel(level=logging.DEBUG)
# 获取文件日志句柄并设置日志级别,第二层过滤
handler = logging.FileHandler("log.txt")
handler.setLevel(logging.INFO)
# 生成并设置文件日志格式,其中name为上面设置的mylog
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# 获取流句柄并设置日志级别,第二层过滤
console = logging.StreamHandler()
console.setLevel(logging.WARNING)
# 为logger对象添加句柄
logger.addHandler(handler)
logger.addHandler(console)
# 记录日志
logger.info("show info")
logger.debug("show debug")
logger.warning("show warning")
(谢彦技术博客)
需要注意的是程序用addHandler函数添加了两个句柄,一个用来显示输出,一个用来记录日志文件,之后输出的log信息会通过句柄调用对应的输出,同一个输出如果addHandler多次,又没有removeHandler,同一条日志就会被记录多次。因此注意不要重复调用,尤其在用Jupyter Notebook调试时,不要重复运行该代码段。
转载请注明出处:https://blog.csdn.net/xieyan0811/article/details/88370430