zoukankan      html  css  js  c++  java
  • Logging模块 + traceback模块 + importlib模块 + requests模块

    Logiging模块日志级别

    CRITICAL = 50
    FATAL = CRITICAL
    ERROR = 40
    WARNING = 30
    WARN = WARNING
    INFO = 20
    DEBUG = 10
    NOTSET = 0

    只能写入到一个文件,多次声明无效
    import logging

    logging.basicConfig(
    #     filename='l1.log',
    #     format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
    #     datefmt='%Y-%m-%d %H:%M:%S %p',
    #     level=logging.INFO      #这里定义这个值是阀值,如果超过这个数了才会写入文件中
    # )
    # logging.log(logging.ERROR,'123123')

    所以我们只能自定义

    def error_log(message):
        #创建文件对象
        file_1_1 = logging.FileHandler('error.log', 'a+', encoding='utf-8')
        fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s")
        file_1_1.setFormatter(fmt)
        # 创建日志对象
        logger1 = logging.Logger('error', level=logging.ERROR)
        
        # 日志对象和文件对象创建关系
        logger1.addHandler(file_1_1)
    
        logger1.log(logging.FATAL,message)
    
    def run_log(message):
        file_1_1 = logging.FileHandler('run.log', 'a+', encoding='utf-8')
        fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s")
        file_1_1.setFormatter(fmt)
        # 创建日志对象
        logger1 = logging.Logger('run', level=logging.ERROR)
        # 日志对象和文件对象创建关系
        logger1.addHandler(file_1_1)
    
        logger1.log(logging.FATAL,message)

    traceback模块

    详细错误信息打印

    class NicPlugin(BasePlugin):
        def linux(self):
            """
            执行命令,获取资产信息
            :return:
            """
            ret = BaseResponse()
            try:
                result = self.cmd('nic')
                ret.data = result
            except Exception as e:
                v = traceback.format_exc() 
                ret.status = False
                ret.error = v
                # 写入本地日志
                obj = LoggerHelper.instance()
                obj.error_logger.log(50,v)
            return ret

     importlib模块

    这个方法就跟django里面的中间件配置方法一个意思

    import importlib
    file_path,class_name = v.rsplit(','1)
    print(file_path,class_name) 
    ##例如输出的是目录下文件 和 类名
    m=importlib.import_module(file_path)     #以字符串形式导入模块
    
    cls=getattr(m,class_name)
    obj=cls()

    requests模块

    settings.API=‘www.baidu.com’
    response = requests.post(
                url=settings.API,
                json = info
                #如果传输格式是json的话,它就会把你的值先序列化,然后在传给API  实际上代码也就是以json.dumps发过去
                # data = info  #如果是data  那你传什么,它就给api里面发什么
            )
            
    request.POST其实是从body里面把数据拿回来.转换成字典,让你使用的!!
        def get_host_list(self):
            import json
            response = requests.get(settings.API)
            host_list = json.loads(response.text)    #所以的数据都是在text中 
            return host_list

     实际上request 返回的有好几种类型:

    -text        字符串类型
    -content    字节类型(bytes)
    -status_code    状态码
    -cookies    
    -headers    响应头
    
    (请求头和请求体 是由2个换行符分割的)

    例如:ret = requests.post(url='http://www.baidu.com',params={'k1':'v1','k2':'v2'},json=json.dumps({'user':‘zcq','pwd':'nb'}))

    这里就是把用json把数据序列化成字符串在传过去

    ret = requests.post(url='http://www.baidu.com',params={'k1':'v1','k2':'v2'},data={'user':‘zcq','pwd':'nb'},)    可以在POST中包含内容传过去

  • 相关阅读:
    Python使用requirements.txt安装类库
    virtualenv -- python虚拟沙盒(linux版本)
    linux下导入、导出mysql数据库命令
    linux中mysql基本操作
    aspx.cs方法设置webmenthod特性接收ajax请求
    vue高级路由
    浅析JS模块规范:AMD,CMD,CommonJS
    当前不会命中断点还未为文档加载任何符号——问题探究
    Node.js安装及环境配置之Windows篇
    NewtonSoft.Json NULL转空字符串
  • 原文地址:https://www.cnblogs.com/zcqdream/p/6764852.html
Copyright © 2011-2022 走看看