深入浅出Python中的logging模块

2020-12-10 19:30 简说Python

↑↑↑关注后"星标"简说Python

人人都可以简单入门Python、爬虫、数据分析

简说Python推荐

来源:Python之王  作者:小sen


One old watch, like brief python 

大家好,我是老表~

logging模块是Python内置的标准模块,主要用于输出脚本运行日志,可以设置输出日志的等级、日志保存路径等。

日志

日志是一种可以追踪某些软件运行时所发生事件的方法。

软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情。一个事件可以用一个可包含可选变量数据的消息来描述。此外,事件也有重要性的概念,这个重要性也可以被称为严重性级(level)。

五个级别

其中Logging一共有五种级别,依次是DEBUG < INFO < WARNING < ERROR < CRITICAL

# @Author:Runsen
#引入了 logging 模块
import logging
LOG_FORMAT = "%(asctime)s----%(name)s----%(levelname)s----%(message)s"
#level 配置为 WARNING 信息,即只输出 WARNING 级别及其以上的信息,
# format指定了 format 格式的字符串,包括asctime运行时间 name模块名称、levelname(日志级别)message (日志内容)
logging.basicConfig(level=logging.WARNING,format=LOG_FORMAT)
logging.debug("This is a debug log")
logging.info("This is a info log")
logging.warning("This is a warning log")
logging.error("This is a error log")
logging.critical("This is a critical log")

具体输出如下。

2020-10-31 12:15:13,181----WARNING----This is a warning log
2020-10-31 12:15:13,181----ERROR----This is a error log
2020-10-31 12:15:13,182----CRITICAL----This is a critical log

为什么DEBUGINFO的信息没有输出?

因为我们在全局配置的时候设置了输出为 WARNING 级别,所以 DEBUGINFO 级别的信息就被过滤掉了。

日志信息的输出格式

basicConfigformat参数指定日志信息的输出格式。

图片

logging模块

logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件和回滚等;可以说,logging模块主要由4部分组成,分别是LoggerHandlerFiltersFormatter

图片

模块化组件使用

模块化组件使用流程:

  • 创建一个logger(日志处理器)对象
  • 定义handler(日志处理器),决定把日志发到哪里。常用的有StreamHandler,输出到控制台。FileHandler输出到文件。
  • 设置日志级别(level)和输出格式Formatters(日志格式器)
  • 把handler添加到对应的logger中去
  • 日志输出

具体示例代码如下:

'''
@Author:Runsen
@Wechat:RunsenL
'
''
import os
import time
import logging
# 第一步、创建一个logger(日志处理器)对象
logger = logging.getLogger("%s_log" % __name__)
logger.setLevel(logging.INFO)
# 第三步、定义handler(日志处理器),决定把日志发到哪里。这里设置FileHandler输出到文件。
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
# 在当前路径下新建logs文件夹
if os.path.exists("Logs"):
    pass
else:
    os.mkdir("Logs")
log_name = "./Logs/"+ rq + '.log'
print(log_name)
# a模式追加
handler = logging.FileHandler(log_name, mode='w')
handler.setLevel(logging.WARNING)
# 第三步、设置日志级别(level)和输出格式Formatters(日志格式器)
formatter = logging.Formatter("%(asctime)s----%(filename)s----[line:%(lineno)d]----%(levelname)s:%(message)s")
handler.setFormatter(formatter)
# 第四步、把handler添加到对应的logger中去
logger.addHandler(handler)
# 第五步、日志输出
logger.debug('this is a logger debug message')
logger.info('this is a logger info message')
logger.warning('this is a logger warning message')
logger.error('this is a logger error message')
logger.critical('this is a logger critical message')

具体的Logs文件夹中Log文件内容如下。

Reference

[1]

传送门~: https://github.com/MaoliRUNsen/runsenlearnpy100


简说Python

长按扫码关注,一起学Python


学习更多:
整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了
本文章转载自公众号:xksnh888

首页 - Python 相关的更多文章: