首页 > 其他分享 >day18 hash logging模块

day18 hash logging模块

时间:2023-12-10 13:56:09浏览次数:29  
标签:__ hash log os logging path 日志 day18

day18
2023年12月9日 周六 14:03:43

day17复习
datetime.datetime.now() 要什么文件切割就可以
random.choice([1,2,3])随机选择
random.shuffle()打乱顺序
random.random(1,2)随机取数
os.mkdir() 新建一个文件夹

os模块与操作系统交互 操作文件和文件夹
sys与py解释器交互

环境变量和文件路径的区别:(文件路径是众多环境变量的一种 用它来指定文件的位置)
我们一般使用环境变量指定一个文件夹的位置,或一个应用程序的位置等。
而path环境变量只是众多环境变量的其中一个,它的变量名叫做“path”,与其他环境变量没有什么区别,只不过“path”这个环境变量经常用到而已

sys.path()获取文件的环境变量,即模块的搜索路径

json模块:
序列化:把数据从内存保存到硬盘 只支持dict/list/str/int/float/bool
反序列化:把数据从硬盘读取到内存
跨平台 跨语言交互 保存的数据为字符串类型

pickle模块:
序列化 反序列化 什么类型的数据都可以存储
但是不能跨平台 保存的数据为二进制类型 所以open的时候要用rb wb


day18开始

hashlib模块:
加密 加密后长度一样
累加 如果使用同一个哈希编码表 不断地哈希 得到的结果是累加的哈希结果 即第一次哈希123 第二次哈希456 实际上第二次哈希的是123456
import hashlib
pwd="yjw".encode("utf8")#哈希前必须编码
print(pwd)
hashlib.md5().update(pwd)
print(hashlib.md5().hexdigest())


logging模块:
import logging
#生成一个logger
logger1=logging.getLogger("user")
logger2=logging.getLogger("bank")

#生成handler
h1=logging.FileHandler("h1.log")
h2=logging.FileHandler("h2.log")
sm=logging.StreamHandler()


#生成formatter
f1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',)

f2 = logging.Formatter('%(asctime)s : %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',)

f3 = logging.Formatter('%(name)s %(message)s',)

#绑定formatter到handler 设置输出到文件或者屏幕的格式
h1.setFormatter(f1)
h2.setFormatter(f2)
sm.setFormatter(f3)

#绑定handler到不同的logger
logger1.addHandler(h1)#user的日志输出到h1
logger2.addHandler(h2)#bank的日志输出到h2
logger2.addHandler(sm)#bank的日志也输出一份到sm

#设置输出级别
logger1.setLevel(10)
logger2.setLevel(10)
h1.setLevel(20)
#测试
logger1.info("我是info 1")
logger1.debug("a1")
logger1.warning("b1")
logger1.error("c1")
logger1.critical("d1")

logger2.info("我是info 2")
logger2.debug("a2")
logger2.warning("b2")
logger2.error("c2")
logger2.critical("d1")


logging模板

import os

import logging.config

 

# 定义三种日志输出格式 开始
s
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \

'[%(levelname)s][%(message)s]' # 其中name为getLogger()指定的名字;lineno为调用日志输出函数的语句所在的代码行
s
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
i
id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
# 定义日志输出格式 结束

l
logfile_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # log文件的目录,需要自定义文件路径 # atm
l
logfile_dir = os.path.join(logfile_dir, 'log') # C:\Users\oldboy\Desktop\atm\log

l
logfile_name = 'log.log' # log文件名,需要自定义路径名

# 如果不存在定义的日志目录就创建一个
if not os.path.isdir(logfile_dir): # C:\Users\oldboy\Desktop\atm\log
os.mkdir(logfile_dir)

 

# log文件的全路径
l
logfile_path = os.path.join(logfile_dir, logfile_name) # C:\Users\oldboy\Desktop\atm\log\log.log
# 定义日志路径 结束

# log配置字典
L
LOGGING_DIC = {

'version': 1,

'disable_existing_loggers': False,

'formatters': {

'standard': {

'format': standard_format

},

'simple': {

'format': simple_format

},

},

'filters': {}, # filter可以不定义
'handlers': {

# 打印到终端的日志
'console': {

'level': 'DEBUG',

'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},

# 打印到文件的日志,收集info及以上的日志
'default': {

'level': 'INFO',

'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',

'filename': logfile_path, # 日志文件
'maxBytes': 1024 * 1024 * 5, # 日志大小 5M (*****)
'backupCount': 5,

'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},

},

'loggers': {

# logging.getLogger(__name__)拿到的logger配置。如果''设置为固定值logger1,则下次导入必须设置成logging.getLogger('logger1')
'': {

# 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'handlers': ['default', 'console'],

'level': 'DEBUG',

'propagate': False, # 向上(更高level的logger)传递
},

},
}
}

 

 

def load_my_logging_cfg():
logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
logger = logging.getLogger(__name__) # 生成一个log实例
logger.info('It works!') # 记录该文件的运行状态

return logger

 


if __name__ == '__main__':

load_my_logging_cfg()

 

标签:__,hash,log,os,logging,path,日志,day18
From: https://www.cnblogs.com/yyyjw/p/17892568.html

相关文章

  • 【JavaSE】集合Collection{List(ArrayList, LinkedList), Set(TreeSet, HashSet, Link
    集合单列集合:Collection接口单列集合:一次添加一个元素;如果集合中添加的是类,要重写equals方法,否则比较的是地址,无法正常删除内容相同的元素。单列集合通用遍历方式1.迭代器遍历2.增强for循环遍历增强for循环底层逻辑还是迭代器,字节码文件反编译为java会发现还是迭代......
  • 【JavaSE】数据结构-哈希表(HashSet/HashMap底层哈希表详解,源码分析)
    哈希表结构JDK8版本之前:数组+链表JDK8版本及之后:数组+链表+红黑树哈希表HashMapput()方法的添加流程创建HashSet集合时,构造方法中自动创建HashMap集合;HashMap空参构造方法会创建一个默认长度为16,默认加载因子为0.75的数组,数组名为table(tips:实际上,HashSet对象创建后,第......
  • Python的hashlib模块
    一、什么是摘要算法1、摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)用于生成数据或文本的简短摘要或哈希值的算法。它们被广泛应用于密码学、数据完整性验证和信息检索等领域。摘要算法通过对输入数据进......
  • .NET 6 (C#) Microsoft.Extensions.Logging 日志框架的使用
    .NET6中的日志框架主要是基于Microsoft.Extensions.Logging,这是一个通用的、可扩展的日志记录接口,允许使用不同的日志提供程序(例如控制台、文件、第三方库等)进行日志记录。本文主要介绍.NET6(C#)中Microsoft.Extensions.Logging日志框架的使用,以及相关的示例代码。1......
  • Go - two bcrypt hashes of the same password are NOT equal
     packagemainimport("fmt""golang.org/x/crypto/bcrypt")funcmain(){password:="abcdef"hashedPassword1,_:=bcrypt.GenerateFromPassword([]byte(password),bcrypt.DefaultCost)fmt.Println(strin......
  • 不要用第三方日志包了Microsoft.Extensions.Logging功能就很强大
    在.NET中,Microsoft.Extensions.Logging是一个广泛使用的日志库,用于记录应用程序的日志信息。它提供了丰富的功能和灵活性,使开发人员能够轻松地记录各种类型的日志,并将其输出到不同的目标,包括日志文件。本文将详细介绍Microsoft.Extensions.Logging的各种基础功能以及如何按天生成......
  • Day18 JavaDoc生成文档
    参数信息(加在类上就是类的注释,加在方法上就是方法的注释)/**@author作者名@version版本号@since指明需要最早使用的jdk版本@param参数名@return返回值情况@throws异常抛出情况*/packagecom.baixiaofan.base;/***@authorBaixiaofan*@version1.0*@si......
  • 数据结构 玩转数据结构 14-3 java中的hashCode方法
    0课程地址https://coding.imooc.com/lesson/207.html#mid=15346 1重点关注1.1重写hashCode和equals方法参见3.1  2课程内容2.1不同的对象的默认hashCode方法Integer相同数字的一样Double相同数字的一样String......
  • 你真的了解HashSet 和HashMap的区别、优缺点、使用场景吗?
     HashSet和HashMap是Java集合框架中的两个常用类,它们都用于存储和管理数据,但在使用方式、功能和性能上有很大的区别。HashSet和HashMap的区别区别一:用途不同HashSet: HashSet是一个基于哈希表的集合,用于存储不重复的元素,它不存储键值对。它实际上是基于HashMap......
  • HashMap超详细源码解析
    原文链接:HashMap和HashSet源码解析1、HashMap概念HashMap实现了Map接口,是一种使用键值对存储数据的数据结构。HashMap允许null作为键和值。HashMap不保证元素的顺序,特别是不保证顺序恒定。HashMap是基于哈希表实现的数据结构,具有快速的插入、删除和查找操作。HashMap使用......