社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

二十八、深入浅出Python中的logging模块

Python开发 • 4 年前 • 339 次点击  
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

作者丨小sen

来源丨Python之王

「@Author:Runsen」

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


-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/114193
 
339 次点击