第二十二天 logging hashlib re 模块
一 logging
1.日志的级别
logging。debug("这是一个调试信息")#10
logging.info("常规信息“”#20
logging.warning("警告信息")#30
logging.error("错误信息") #40
logging.critical("严重错误")#50
在logging模块中有对应的常量来识别级别
默认情况下 默认的级别30 WARNING 日志输出位置是控制台
2.自定义日志的配置
logging.basicConfig(
filename="a.log",
filemode="a.log",
filemode="at",
level=10,
level=10
format="%(asctime)s %(levelname)s %(funcName)s %(lineno)s %(message)s",
datefmt="%Y-%m-%d %X %p"
)
logging.debut("这是又是调试信息“”)
日志模块的四个核心角色
1.logger 日志生成器
2.filter 过滤器
3.handler 处理器
4.formatter格式处理器
1 创建一个日志生成器
mylog = logging.getLogger("mylog")
设置生成器级别
mylog.setLevel(logging.DEBUG)
2.搞一个日志处理器
fh = logging.FileHandler("b.log",encoding = "utf-9")
3.搞一个格式处理器
fm = logging.Formatter(
"%(asctime)s %(levelname)s %(funcName)s %(lineno)s %(message)s",
datefmt="%Y-%m-%d %X %p")
4 将三个对象进行关联
mylog.addHandler(fh)
fh.setFormatter(fm)
#测试
mylog.debug("mylog的测试!")日志的继承
log1 = logging.getLogger("father")
log2 = logging.getLogger("father.son")
log3 = logging.getLogger("father.son.grandson")
默认值True 标识 有继承关系 当子的日志产生日志时 给他父级以及父级以上都发一份
如果不需要就设置False
log3.propagate = False
fh = logging.FileHandler("c.log",encoding="utf-8")
fm = logging.Formatter(
"%(asctime)s %(levelname)s %(funcName)s %(lineno)s %(message)s",
datefmt="%Y-%m-%d %X %p")
log1.addHandler(fh)
log2.addHandler(fh)
log3.addHandler(fh)
fh.setFormatter(fm)
log1.warning("father log")
log2.warning("father.son log")
log3.warning("father.son.grandson log")
import logging.config
# 以字典来配置日志 传入一个字典对象 就不需要在编写上面那一堆代码
#logging.config.dictConfig()
# 流处理器
log1 = logging.getLogger("a")
# 输出到文件
fh = logging.FileHandler("c.log",encoding="utf-8")
# 输出到控制台
sh = logging.StreamHandler()
log1.addHandler(sh)
log1.addHandler(fh)
fm = logging.Formatter(
"%(asctime)s %(levelname)s %(funcName)s %(lineno)s %(message)s",
datefmt="%Y-%m-%d %X %p")
sh.setFormatter(fm)
log1.warning("测试2!")
import lib.common
logger = lib.common.get_logger()
def login():
logger.debug("测试 测试!")
login()
logging的配置文件与项目配合使用
/bin/start,py
import os,sys
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
import core.shop
def run():
print("welcome to oldboy")
core.shop.shopping() run()
\logging\conf
standard_format = "%(name)s %(asctime)s %(levelname)s %(module)s %(funcName)s %(lineno)s %(message)s"
simple_format = "%(name)s %(asctime)s %(module)s %(message)s"
complete_format = "%(asctime)s %(levelname)s %(funcName)s %(lineno)s %(thread)s %(process)s %(message)s"
logfile_path = r"E:\上海python全栈4期\day22\代码\1.logging模块\log\d.log" LOGGING_DIC = {
'version': 1,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
"complete":{
"format": complete_format
}
},
'filters': {},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'standard',
'filename': logfile_path, #
'maxBytes': 1024 * 1024 * 5, # 日志文件的最大大小为5M 超出后 换文件
'backupCount': 5, # 最多留五个日志文件
'encoding': 'utf-8',
},
},
'loggers': {
# 在getLogger的时候 如果指定的名称 不存在 或者不给名称 用的就是默认的
# 在这里如果key为空 它就是默认的
# 你可以自己定义生成器的名称 并且他们还能使用相同的默认配置
'': {
'handlers': ['default', 'console'],
'level': 'DEBUG',
'propagate': False,
},
},
}
\core\shop.py
import lib.common
logger = lib.common.get_logger() def shopping():
print("大爷 开始剁手吧!")
logger.debug("大爷剁手成功 从此与代码绝缘!")
\lib\common
import lib.common
logger = lib.common.get_logger() def shopping():
print("大爷 开始剁手吧!")
logger.debug("大爷剁手成功 从此与代码绝缘!")
二 hash
hash lib
hash是一种算法 是将一个任意长度的数据 根据计算 得到一个固定长度特征码
特征:不同输入 可能会有相同的结果 几率特小
相同的输入 必然得到相同的结果
由于散列(特征)的性质 从原理来看是不可能 反解
用来 验证 两个输入的数据是否一致
使用场景
1 密码验证
123321 jahsajasajhsajahjas
client 加密后结果 server 拿到加密后
2.验证数据是否被篡改 比如游戏安装包 有没有被改过
为防止别人撞库成功 可用提升密码的复杂度 其次可以为密码加盐(加内容)
import hashlib
m = hashlib.md5("aaa",encode("utf-8"))
print(len(m.hexdigest()))
#撞库的破解的原理 有人事先 把常见的 明文和密文的对应关系 存到了数据库中
运气好就能查询到
pwds = {"aaa":"47bce5c74f589f4867dbd57e9ca9f808"}
h1 = hashlib.sha512("123".encode("utf-8"))
h2 = hashlib.sha3_512("123".encode("utf-8"))
# print(len(h.hexdigest()))
print(h1.hexdigest())
print(h2.hexdigest())
# 2b70683ef3fa64572aa50775acc84855
# 加盐
m = hashlib.md5("321".encode("utf-8"))
#加
m.update("abcdefplkjoujhh".encode("utf-8"))
print(m.hexdigest())
import hmac
# 没啥区别 只是在创建的时候必须加盐
h = hmac.new("abcdefjjjj".encode("utf-8"))
h.update("123".encode("utf-8"))
print(h.hexdigest())
第二十二天 logging hashlib re 模块的更多相关文章
- Python第二十二天 stat模块 os.chmod方法 os.stat方法 pwd grp模块
Python第二十二天 stat模块 os.chmod方法 os.stat方法 pwd grp模块 stat模块描述了os.stat(filename)返回的文件属性列表中各值的意义,根据 ...
- 加密模块hashlib+日志模块logging
目录 1.hashlib 加密模块 1.hashlib模块基本使用 1.2 详细操作 ①md5加密模式 ②sha256复杂加密模式 ③加盐操作(普通加盐) ④加盐操作(动态加盐) 2.logging ...
- day 27 多态 接口 类方法 静态方法 hashlib 摘要算法模块
# 多态的理解:# Python 天生自带多态# 鸭子类型 list 和 tuple 就是一对鸭子类型 很像但是没有继承关系## 而其他的类型 上传参数或者打印参数的时候 必须是指定的数据类型# -- ...
- 函数式编程(logging日志管理模块)
本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用logging四大组件记录日志 配置logging的几种方式 向日 ...
- javaSE第二十二天
第二十二天 312 1:登录注册IO版本案例(掌握) 312 2:数据操作流(操作基本类型数据的流)(理解) 313 (1)定义: 313 (2)流对象名称 313 (3 ...
- Python第二十四天 binascii模块
Python第二十四天 binascii模块 binascii用来进行进制和字符串之间的转换 import binascii s = 'abcde' h = binascii.b2a_hex(s) # ...
- 孤荷凌寒自学python第二十二天python类的继承
孤荷凌寒自学python第二十二天python类的继承 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自 ...
- hashlib摘要算法模块,logging日志,configparser配置文件模块
一.hashlib模块(摘要算法模块) 1.算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢? 摘要算法又称哈希算法.散列算法.它通过一个函数,把 ...
- python常用模块补充hashlib configparser logging,subprocess模块
一.hashlib模板 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定 ...
随机推荐
- Centos 7安装RabbitMQ 3.7.8版本(单机版)-不使用RPM
RabbitMQ是目前非常热门的消息中间件,凭借其高可靠.高扩展.高可用及丰富的功能特性:TTL.死信队列.延迟队列.优先级队列.消息持久化.镜像队列. 消息中间件是指利用高效可靠的消息传递机制进行与 ...
- quartz获取缓存中所有运行中的Job
原文地址:https://blog.csdn.net/zzm8421/article/details/77769203 Quartz 2.1.5: public static void getAllJ ...
- python四:函数练习--小白博客
为什么要有函数?函数式编程定义一次,多出调用函数在一定程度上可以理解为变量函数的内存地址加上()就是调用函数本身也可以当做参数去传参 不用函数:组织结构不清晰代码的重复性 def test():#te ...
- H5 字体属性补充
04-字体属性补充 abc我是段落 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- 二次剩余从csdn
欧拉准则 模\(p\)意义下,\(a\)是二次剩余等价于\(a^{\frac{p-1}{2}}\equiv 1\),\(a\)不是二次剩余等价于\(a^{\frac{p-1}{2}}\equiv -1 ...
- python实现一个二分查找
二分查找: 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列 查找过程: 首先,假设表中元素是 ...
- WinRAR从入门到高级的操作技巧集合
一.基础技巧 1.批量建立文件夹 如果在工作中,经常要建立很多相同文件夹结构(如在备份数据时).那可以把这个繁琐的工作让WinRAR完成:先在“资源管理器”中把多个文件夹结构建好(包括其下的子文件夹) ...
- 【kindle笔记】之 《解忧杂货店》-2018-3-13
[kindle笔记]读书记录-总 <解忧杂货店>-2018-3-13 东野的大ID加上此书的大ID,今天终于在回来天津的火车上一口气读完了. 此前在微信读书上看过这本书,只看了前一部分,感 ...
- CodeForces Round #548 Div2
http://codeforces.com/contest/1139 A. Even Substrings You are given a string s=s1s2…sns=s1s2…sn of l ...
- C#复习笔记(4)--C#3:革新写代码的方式(查询表达式和LINQ to object(下))
查询表达式和LINQ to object(下) 接下来我们要研究的大部分都会涉及到透明标识符 let子句和透明标识符 let子句不过是引入了一个新的范围变量.他的值是基于其他范围变量的.let 标识符 ...