Python中使用Logging模块进行调试和日志记录

在学习资料满天飞的大环境下,知识变得非常零散,体系化的知识并不多,这就导致很多人每天都努力学习到感动自己,最终却收效甚微,甚至放弃学习。我的使命就是过滤掉大量的垃圾信息,将知识体系化,以短平快的方式直达问题本质,把大家从大海捞针的痛苦中解脱出来。

1 使用原因

使用Logging模块相较于print的优势如下:

(1) 可以记录文件并且同时打印控制台。

(2) 可以使用5种打印等级:critical、error、warning、info、debug。

(3) 方便统一格式,比如打印时间戳、文件名、代码行、打印等级等。

(4) Logging模块自身已经实现单例模式,而且禁止二次打开,安全性更高。


2 使用方法

2.1 源码

闲言少絮,先上源码。

# -*- coding: utf-8 -*-
# ~ #----------------------------------------------------------------------
# file name: path.py
# function: define log output format etc. with logging module
# author: albert
# data: 2020/07/05

############################################################################
# 包含外部模块
#
import sys
import os
import logging

############################################################################
# 功能实现
#
# creat file path
curFileDir = os.path.dirname(__file__) #获取当前类所在文件路径
fileDir = os.path.abspath(os.path.join(curFileDir,"../")) #相对路径转绝对路径
sys.path.append(curFileDir) #添加本文件夹路径到系统路径

# config parameters
log_name = fileDir + "/my_log.log"
log_level = logging.DEBUG
log_format = " [%(asctime)s - %(filename)s(%(lineno)s) -  %(levelname)s] - %(message)s"

# config console
console_handler = logging.StreamHandler(sys.stderr)
console_handler.setLevel(log_level)
console_handler.setFormatter(logging.Formatter(log_format))
# config log file
file_handler = logging.FileHandler(log_name)
file_handler.setLevel(log_level)
file_handler.setFormatter(logging.Formatter(log_format))
# create log object
log = logging.getLogger("mylogger")
log.setLevel(log_level)
log.addHandler(console_handler)
log.addHandler(file_handler)

############################################################################
# 调试代码
#
if __name__ == "__main__":
	log.error("hello world ")
	log.error("hello %d world " % 3)
	log.debug("hello {} world {}".format((1,3,4), "hello %d times" % 3))

2.2 说明

(1)上述源码封装到一个.py文件中,被其他.py文件import之后就可以仿照调试代码那样使用。

(2)上述源码实现了下述功能:

  • 输出内容既可以打印到控制台,又可以输出到log文件。

  • 输出格式中包括运行时间、文件名、代码行号、打印等级和用户输出内容。

  • 源码中log_level使用了三次,其实三个地方可以使用不同级别,自己可以尝试。


    <完>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章