logging 日志输出乱码 info_二十八、深入浅出Python中的 logging模块

本文介绍了Python内置的logging模块,它可用于输出脚本运行日志,能设置日志等级、保存路径等。阐述了日志概念、logging的五个级别,说明了日志信息输出格式,还讲解了模块化组件的使用流程,包括创建日志处理器、定义日志发送位置等,并给出示例代码。

c9663ed34dbc4df995d597636a891d93.png

「@Author: Runsen」

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

日志

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

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

五个级别

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

365b4b52dbc046ca604ec8f2f75d8215.png
# @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参数指定日志信息的输出格式。

5e61f7fe7e966a5e2a5308e20777a13a.png

logging模块

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

481ebabca7582228b58f6aee8b7e19b7.png

模块化组件使用

模块化组件使用流程:

  • 创建一个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文件内容如下。

ea4fb86f1e1ee0dcb4043388caddfe28.png
❝ 本文已收录 GitHub,传送门~[1] ,里面更有大厂面试完整考点,欢迎 Star。

Reference

[1]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值