你也可以手敲一个高速下载器(三)
你也可以手敲一个高速下载器(三)日志和数据类
前言
上一篇讲了错误异常的重试,这节来说说日志相关的,还有@dataclass
相关的东西。
日志
一个成熟的项目中,完善的日志输出是必不可少的,大部分的情况下,我们可以选择使用官方的日志库:loggig
,也是很好用的,但官方的库配置起来非常的复杂,要经过完善的配置才能在我们的项目的去使用。所以在这个我选择的是一个第三方开箱即用的一个库:loguru
,鉴于本人不想水文~~(其实就是懒)~~,直接附上一个官方的图,自己看着了解吧
配置日志级别
通过上图,我想大家也应该清楚了这个库的基本用法和优点,就是方便快捷,看着也好看。大家也发现了,在使用的时候是可以输出日志级别的,比如:INFO级别和DEBUG级别,在真实项目中,DEBUG
级别的日志内容会输出的特别详细,INFO
级别则是记录一些主要的内容,通过设置去调整。但我们发现在直接使用的时候是无法调整级别的,需要配置才可以:
logger.remove()
logger.add(sys.stderr, level=self._setting.log_Level)
第一行是删除默认是日志,如果不删除的话会重复输出日志,第二个是添加一个新的日志,并且根据需要设置日志级别
学习文档
因为本篇文章并不是专门介绍设置库的,也就没有写的过于详细,也不想写的过于详细,因为很多介绍库的文章比我写的更好,更详细,直接去看就好了。我呢,只是让大家只是有这么个东西,并且挺好用的就可以了。
- 官方GitHub:github.com/Delgan/logu…
- 官方文档:loguru.readthedocs.io/en/stable/
- 静觅大佬写的文章:cuiqingcai.com/7776.html
dataclass
这个是python官方的一个库,作用是根据类的成员变量自动生成__init__
方法,可以在初始化的时候直接使用,下面用实例来说明:
class User(object):
uid: int = 0
name: str = ""
age: int = 0
def __iniit__(self, uid, name, age):
self.uid = uid
self.name = name
self.age = age
上面是很正常的一种写法,就是定义一些成员变量,然后在__init__
方法中传递参数进行赋值,但如果变量特别多呢,这种写法就很繁琐了,这时就可以用到dataclass
,使用这个,就可以不用手写初始化方法了,会默认把所有的成员变量都写__init__
参数中,常常和field
相配合使用,下面用代码说明:
from dataclasses import field, dataclass
from typing import Union, Dict
@dataclass
class Setting:
proxies: Union[Dict, str] = field(default=None, init=False)
retrys_count: int = field(default=10)
retries_delay: int = field(default_factory=int)
allow_codes: list = field(default_factory=list)
可以看到上面定义了四个成员变量,其中proxies
设置了默认值为空,并且init
设置为False
,说明不会在__init__
方法中出现这个参数,retrys_count
则直接设置默认值为10,后面两个是使用了default_factory
来设置默认值的,他会根据数据类型自动设置对应的默认值,比如int默认值0,str的默认值就是""
相关资料
直接去看官方文档吧,很全。
结语
这节介绍了这个项目会用的日志库:loguru
,和数据类:dataclass
,但也只是介绍了一下,大家自己下去慢慢了解。好,先这样,下节更精彩
转载自:https://juejin.cn/post/7130648963413180429