• day 17


    一.包:

    1. 包: 包含有__init__.py 文件的文件夹,本质就是一种模块,就是被导入使用的,
    文件夹就是用来组织文件的
    包内部的文件就是被导入使用的
    2. 包的使用:
    首次导入包发生的三件事情:
    1.以包下的__init__的文件为基准产生一个名称空间
    2.执行包下的__init__文件的代码,将执行过程中产生的名字存放到名称空间里
    3.在当前文件中拿到有个名字,该名字就是指向__init__.py 名称空间的名字
    导入包需要注意的问题:
    1. 但凡是在导入语句中带点的,点的左边必须是一个包
    2.导入就是在导入包下面的__init__..py 文件
    3.包内部模块的导入,通常是相对导入 用. 表示当前所在的文件夹,..表示上一级的文件夹
    4.相对导入只能在包内部模块间相互导入,使用.. 表示上一级,不能超出顶级包


    二 . logging 模块

    # 1. 控制日志级别
    # 2. 控制日志格式
    # 3. 控制输出的目标为文件


    目标:# 1. 能够同时往终端与文件中记录日志
    # 2. 能够修改字符串编码
    # 1. logger对象: 负责生产各种级别的日志
    logger1 = logging.getLogger('用户交易') # 日志名用来标识日志的与什么业务有关

    # 2. filter对象: 过滤日志

    # 3. handler对象: 控制日志输出目标位置
    fh1 = logging.FileHandler('a1.log',encoding='utf-8')
    fh2 = logging.FileHandler('a2.log',encoding='utf-8')
    ch = logging.StreamHandler()

    # 4. formmater对象
    formatter1 = logging.Formatter(
    fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S %p'
    )

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

    # 5. 绑定logger对象与handler对象
    logger1.addHandler(fh1)
    logger1.addHandler(fh2)
    logger1.addHandler(ch)

    # 6. 绑定handler对象与formatter对象

    fh1.setFormatter(formatter1)
    fh2.setFormatter(formatter1)
    ch.setFormatter(formatter2)

    # 7. 设置日志级别,有logger对象与handler对象两层关卡,必须都放行最终日志才会放行,通常二者级别相同
    logger1.setLevel(10)
    fh1.setLevel(10)
    fh2.setLevel(10)
    ch.setLevel(10)

    # 8. 使用logger对象产生日志
    logger1.info('alex给egon转账1个亿')
    logging模板
    setting.py 文件
    standard_format = '%(asctime)s - task:%(name)s - %(filename)s:%(lineno)d -' \
                      ' %(levelname)s : [%(message)s]'
    
    simple_format = '%(filename)s:%(lineno)d - %(levelname)s : [%(message)s]'
    BASE_DIR=os.path.dirname(os.path.dirname(__file__))>>>>得到顶级的项目的文件夹
    fh1_path = os.path.join(BASE_DIR,'log','a1.log')>>>>得到当前的写入文件的路径
    fh2_path = os.path.join(BASE_DIR,'log','a2.log')
    # log配置字典 LOGGING_DIC = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': standard_format }, 'simple': { 'format': simple_format }, }, 'filters': {}, 'handlers': { #打印到终端的日志 'ch': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', # 打印到终端 'formatter': 'simple' }, #打印到a1.log文件的日志 'fh1': { 'level': 'DEBUG', 'class': 'logging.FileHandler', # 保存到文件 'formatter': 'standard', 'filename': fh1_path, # 日志文件的路径 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了 }, # 打印到a2.log文件的日志 'fh2': { 'level': 'DEBUG', 'class': 'logging.FileHandler', # 保存到文件 'formatter': 'simple', 'filename': fh2_path, # 日志文件的路径 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了 }, }, 'loggers': { '': { 'handlers': ['fh1', 'fh2', 'ch'], 'level': 'DEBUG', }, }, } run.py 文件 import logging.config import settings logging.config.dictConfig(settings.LOGGING_DIC) logger1=logging.getLogger('用户交易') #logger1-> fh1,fh2,ch logger1.info('alex给egon转账1个亿') # logger2=logging.getLogger('用户权限') #logger2-> fh1,fh2,ch # logger2.error('egon没有执行权限')
    
    
    








  • 相关阅读:
    JavaWeb:ServletRequestListener
    JavaWeb:HttpServletRequestWrapper
    JavaWeb:Filter
    JavaWeb:HttpSession
    对APS的简单了解
    rem,px,em最大的区别;
    使用vue-cli构建工具构建vue项目时候组件的使用
    webpack 4.0 配置方法以及错误解决
    px,rem,em 通过媒体查询统一的代码
    关于页面中css某些情况下出现不知原因的隔断解决办法
  • 原文地址:https://www.cnblogs.com/jxl123/p/9455862.html
Copyright © 2020-2023  润新知