欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-30 22:41:30
可以移植到任何项目的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使用了三次,其实三个地方可以使用不同级别,自己可以尝试。


    <完>

本文地址:https://blog.csdn.net/weixin_44873133/article/details/107141003