一 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 模块的更多相关文章

  1. Python第二十二天 stat模块 os.chmod方法 os.stat方法 pwd grp模块

    Python第二十二天   stat模块  os.chmod方法  os.stat方法  pwd  grp模块 stat模块描述了os.stat(filename)返回的文件属性列表中各值的意义,根据 ...

  2. 加密模块hashlib+日志模块logging

    目录 1.hashlib 加密模块 1.hashlib模块基本使用 1.2 详细操作 ①md5加密模式 ②sha256复杂加密模式 ③加盐操作(普通加盐) ④加盐操作(动态加盐) 2.logging ...

  3. day 27 多态 接口 类方法 静态方法 hashlib 摘要算法模块

    # 多态的理解:# Python 天生自带多态# 鸭子类型 list 和 tuple 就是一对鸭子类型 很像但是没有继承关系## 而其他的类型 上传参数或者打印参数的时候 必须是指定的数据类型# -- ...

  4. 函数式编程(logging日志管理模块)

    本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用logging四大组件记录日志 配置logging的几种方式 向日 ...

  5. javaSE第二十二天

    第二十二天    312 1:登录注册IO版本案例(掌握)    312 2:数据操作流(操作基本类型数据的流)(理解)    313 (1)定义:    313 (2)流对象名称    313 (3 ...

  6. Python第二十四天 binascii模块

    Python第二十四天 binascii模块 binascii用来进行进制和字符串之间的转换 import binascii s = 'abcde' h = binascii.b2a_hex(s) # ...

  7. 孤荷凌寒自学python第二十二天python类的继承

    孤荷凌寒自学python第二十二天python类的继承 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自 ...

  8. hashlib摘要算法模块,logging日志,configparser配置文件模块

    一.hashlib模块(摘要算法模块) 1.算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢? 摘要算法又称哈希算法.散列算法.它通过一个函数,把 ...

  9. python常用模块补充hashlib configparser logging,subprocess模块

    一.hashlib模板 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定 ...

随机推荐

  1. C#中存储数据的集合:数组、集合、泛型、字典

    为什么把这4个东西放在一起来说,因为c#中的这4个对象都是用来存储数据的集合……. 首先咱们把这4个对象都声明并实例化一下: //数组 ]; //集合 ArrayList m_AList = new ...

  2. List对象去重碎碎念之神叨叨

    前言 List集合操作去除重复数据的这种情况经常会碰到,博客园里面也有很多大神们做过,在这里主要是借鉴然后自己整理了一下,主要是为了方便自己,以后再次碰到这种去重问题,直接打开自己的链接拿起键盘就是干 ...

  3. java OOM还在看log日志,兄弟你错的的很严重,正确方式是分析dump文件

    目录 OOM异常--intsmaze 正确姿势dump文件分析--intsmaze 正确的姿势--intsmaze dump丢失打印--intsmaze 哪些内存溢出会产生dump文件--intsma ...

  4. SQL 显示表名显示列名

    显示表名:show 表名: 显示列(Field)名:show columns from 表名:

  5. eclipse 执行自带的maven命令无效

    原文地址:https://blog.csdn.net/qq_26386171/article/details/78262702 下面加上(前提是你的环境变量里已经配置过) -Dmaven.multiM ...

  6. Method not found: !!0[] System.Array.Empty()错误

    最近由于公司项目需要将之前支持的TLS1.0改成更安全的TLS1.2,而公司现有项目都是老系统,有的是.NET FrameWork 4.0,有的是.NET FrameWork3.5,但是TLS1.2默 ...

  7. 几何学观止(Lie群部分)

    上承这个页面,这次把Lie群的部分写完了 几何学观止-微分几何部分(20181102).pdf 我觉得其他部分(尤其是代数几何部分)我目前没有把握写得令自己满意,总之希望在毕业前能写完吧. 这次调整了 ...

  8. 多路选择器实现总线结构——Verilog

    ////////////////////////////////////////////////////////////////////////////////// //该程序完成通过多路选择器MUX ...

  9. 关于对于system函数和c++标准下的新的变量定义方式{}

  10. UnderWater+SDN论文之五

    Underwater Sensor Networks with Mobile Agents: Experience from the Field Source: LNICST 2013 论文是来自两个 ...