[笔记]Python 您所在的位置:网站首页 asctime函数 [笔记]Python

[笔记]Python

2023-04-15 11:18| 来源: 网络整理| 查看: 265

一、什么是日志:项目运行的数据记录

二、日志的作用

1.记录程序执行的过程

2.还原用户的操作

3.可用来定位bug(后端的问题看日志,前端的直接F12)

三、日志收集器

1.用来收集程序输出数据的工具

2.数据格式(包含哪些信息)

(1)日志内容

(2)日志级别

[等级由低到高]

--debug调试级别:给程序员看的;

--info()级别:正常记录程序的执行过程,用来定位bug;

--warning警告级别:可能有影响,不是报错;

--error级别:报错信息,某个功能出错,但是其他功能还可以用;

--critical致命级别:严重错误影响程序运行;

(3)输出时间

(4)哪一行代码输出的

(5)日志的格式

(6)日志输出到哪里(控制台、**.log文件)

四、python自带日志收集器

import requests,logging,pprint # logging是python自带的日志收集器,显示信息不够友好,后面会自己写一套 logging.basicConfig(level=logging.DEBUG) #将默认的日志收集器(root)的日志级别改成了debug res = requests.post(url="http://httpbin.org/post",data={"key1":"val1"}) 结果: DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): httpbin.org DEBUG:urllib3.connectionpool:httpbin.org "POST /post HTTP/1.1" 200 479

五、自定义日志收集器

以下代码设置了2种渠道,一个是控制台,一个是放在文件里

import requests,logging,pprint from logging import handlers #自定义日志收集器 # 1.创建一个日志收集器 my_log = logging.getLogger(name="mylog") # 2.创建日志渠道 my_qd = logging.StreamHandler() #控制台 # 也可以创建文件渠道,把日志保存在文件中 log_file_qd = handlers.TimedRotatingFileHandler(filename="mylog.log",when='D',interval=2,backupCount=3,encoding='utf-8') '''when代表切割日志的周期 interval 代表多少个周期when,换一个日志文件 backupCount 日志文件保留的最多个数,不写也可以''' # 3.设置日志格式 ''' %(name)s 日志渠道的名称 %(levelno)s 日志级别对应的数字编号 (DEBUG, INFO,WARNING, ERROR, CRITICAL) %(levelname)s 日志级别的文字版 ("DEBUG", "INFO","WARNING", "ERROR", "CRITICAL") %(pathname)s 输出日志的py文件的绝对路径 (名称.py) %(filename)s py文件的名称(名称.py) %(module)s py文件的名称,名称没有后缀 %(lineno)d 输出日志的行数 %(funcName)s 输出日志的函数的名称,不是函数就输出模块名称 %(created)f 日志输出的时间,格式是时间戳 %(asctime)s 日志输出时间,格式:年-月-日 时-分-秒,毫秒 %(msecs)d 毫秒,日志输出时间毫秒级别 %(relativeCreated)d 日志输出相对时间,相对模块加载多久后日志输出,毫秒 %(thread)d 线程ID %(threadName)s 线程名称 %(process)d 进程ID,一个进程可以启动多个线程 %(message)s 日志信息 ''' # 创建日志格式 fmt1 = "%(name)s-- %(asctime)s--%(pathname)s--%(levelno)s--%(levelname)s--%(lineno)d>>>:%(message)s" #中间的连接符写啥都行 my_fmt = logging.Formatter(fmt=fmt1) my_qd.setFormatter(fmt=my_fmt) #将日志格式绑定到日志渠道上 # ---------------------------------------- log_file_qd.setFormatter(fmt=my_fmt) #将日志格式绑定到文件日志渠道上 # 4.日志级别:一般设置在日志收集器上 my_log.setLevel(logging.DEBUG) #可以单独给渠道设置日志级别,但是一定要在收集器日志级别的范围内,也就是收集器范围>渠道范围 log_file_qd.setLevel(logging.INFO) # 5.渠道绑定到收集器 my_log.addHandler(my_qd) # 控制台渠道 # ---------------------------------------- my_log.addHandler(log_file_qd) #将文件渠道绑定到收集器 my_log.debug(msg="测试日志,debug级别") my_log.info(msg="info级别日志")

六、封装日志收集器,供其他模块调用

import requests,logging,pprint from logging import handlers def my_log(): #自定义日志收集器 # 1.创建一个日志收集器 my_log = logging.getLogger(name="mylog") # 2.创建日志渠道 my_qd = logging.StreamHandler() # 也可以创建文件渠道,把日志保存在文件中 log_file_qd = handlers.TimedRotatingFileHandler(filename="mylog.log",when='D',interval=2,backupCount=3,encoding='utf-8') # 3.设置日志格式 fmt1 = "%(name)s-- %(asctime)s--%(pathname)s--%(levelno)s--%(levelname)s--%(lineno)d>>>:%(message)s" #中间的连接符写啥都行 my_fmt = logging.Formatter(fmt=fmt1) my_qd.setFormatter(fmt=my_fmt) #将日志格式绑定到日志渠道上 # ---------------------------------------- log_file_qd.setFormatter(fmt=my_fmt) #将日志格式绑定到文件日志渠道上 # 4.日志级别:一般设置在日志收集器上 my_log.setLevel(logging.DEBUG) #可以单独给渠道设置日志级别,但是一定要在收集器日志级别的范围内,也就是收集器范围>渠道范围 log_file_qd.setLevel(logging.INFO) # 5.渠道绑定到收集器 my_log.addHandler(my_qd) # 控制台渠道 # ---------------------------------------- my_log.addHandler(log_file_qd) #将文件渠道绑定到收集器 return my_log Logs = my_log() ''' 延伸:为什么要在此处实例化? 如果在其他文件实例化,就存在不同文件都各自创建收集器的情况,导致日志被不同的收集器反复打印 '''

其他模块调用

from file import Logs Logs.info("我是其他文件调用的日志,info")



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有