[量化投资-学习笔记016]Python+TDengine从零开始搭建量化分析平台-日志输出

一个完成的程序一定少不了对异常的处理,以及错误日志的输出。

在之前章节的程序中对这两部分没有进行说明,以下用两个单独的章节进行介绍。

[量化投资-学习笔记017]Python+TDengine从零开始搭建量化分析平台-异常处理

日志输出

logging 是 Python 标准库中的一个模块,用于记录应用程序的事件和错误信息。它可以帮助开发人员在应用程序中实现灵活的日志记录,以便更好地了解应用程序的运行情况。模块提供DEBUG、INFO、WARNING、ERROR、CITICAL等多种日志级别。

  • logging 的运行效率高于 print

简单应用:

import logging
import requests
from requests.auth import HTTPBasicAuth

def request_post(url, sql, user, pwd):
    logging.debug(f'Requeest from {url}')
    try:
        sql = sql.encode("utf-8")
        headers = {
            'Connection': 'keep-alive',
            'Accept-Encoding': 'gzip, deflate, br'
        }
        result = requests.post(url, data=sql, auth=HTTPBasicAuth(user,pwd),headers=headers)
        logging.debug(result)
        text = result.content.decode()
        logging.debug(text)
        return text
    except Exception as e:
        logging.error(e)

logging.setLevel('INFO')
request_post(url,sql,user,pwd)

程序说明:

上述代码做了以下更改和优化:

  1. 导入了loggingrequests模块,并从requests.auth模块中导入了HTTPBasicAuth类。

  2. 添加了日志记录操作。通过调用logging.debug()在关键位置添加日志记录,以便观察程序运行时的信息。

  3. 使用logging.debug()记录请求的URL和结果对象。

  4. 使用logging.error()记录异常信息。

  5. 设置日志级别为INFO,以确保输出INFO级别及以上的日志信息。

通过调整日志级别,可以方便的控制日志输出,更好的调试程序。

示例代码

以上程序是将日志直接输出到控制台,logging 同样支持将日志写入文件。以下是 logging 的一个初始化示例。

import logging
log_file = 'test.log'
handler_file = logging.FileHandler(log_file) 
handler_console = logging.StreamHandler()    
handler_file.setLevel('ERROR')             
handler_console.setLevel('INFO')           
selfdef_fmt = '[%(asctime)s] %(funcName)s(%(process)d) %(levelname)s - %(message)s'
formatter = logging.Formatter(selfdef_fmt)
handler_file.setFormatter(formatter)
handler_console.setFormatter(formatter)
logger = logging.getLogger(__name__)
logger.setLevel('DEBUG')      
logger.addHandler(handler_file)  
logger.addHandler(handler_console)

代码说明

  1. import logging:导入logging模块。

  2. log_file = 'test.log':定义日志文件的路径和名称。

  3. handler_file = logging.FileHandler(log_file):创建一个FileHandler实例,用于将日志记录到文件中。

  4. handler_console = logging.StreamHandler():创建一个StreamHandler实例,用于将日志记录输出到控制台。

  5. handler_file.setLevel('ERROR'):设置FileHandler实例的日志记录级别为ERROR。只有ERROR级别及以上的日志才会被记录到文件中。

  6. handler_console.setLevel('INFO'):设置StreamHandler实例的日志记录级别为INFO。INFO级别及以上的日志会被输出到控制台。

  7. selfdef_fmt = '[%(asctime)s] %(funcName)s(%(process)d) %(levelname)s - %(message)s':自定义日志记录格式,包括时间、函数名、进程ID、日志级别和消息。

  8. formatter = logging.Formatter(selfdef_fmt):创建一个Formatter实例,并传入自定义的日志格式。

  9. handler_file.setFormatter(formatter):将Formatter实例设置为FileHandler实例的格式器,以便将记录的日志按照指定的格式写入文件。

  10. handler_console.setFormatter(formatter):将Formatter实例设置为StreamHandler实例的格式器,以便将记录的日志按照指定的格式输出到控制台。

  11. logger.setLevel('DEBUG'):设置Logger实例的日志级别为DEBUG,即记录所有级别的日志信息。

  12. logger.addHandler(handler_file):将FileHandler实例添加到Logger实例中。

  13. logger.addHandler(handler_console):将StreamHandler实例添加到Logger实例中。

这样配置完成后,logger对象可以使用不同级别的日志记录操作。例如,使用logger.debug('This is a debug message')来记录DEBUG级别的日志消息。DEBUG级别的日志将被写入文件和显示在控制台上。

使用技巧

如果某些函数和信息仅在调试阶段使用,那么可以使用 isEnabledFor 进行优化

if logging.isEnabledFor(loggine.DEBUG):
    loggine.debug('%s',debug_fun())

性能要优于

logging.debug('%s',debug_fun())

注意事项

  1. 避免使用 root logger
  2. 统一 logging 配置
  3. 正确配置日志级别
  4. 避免在日志中打印敏感信息(如:用户名、密码)
  5. 保持时间格式统一
  6. 控制日志文件大小,规划日志好文件位置

参考:

  1. Python实用教程系列——Logging日志模块
  2. python性能分析之log
  3. python 性能提升–去掉所有print
  4. python3的logging模块的最佳实践
  5. Python Logging Best Practices: The Ultimate Guide
  6. 10 Best Practices for Logging in Python

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/143099.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Windows】安装绿色版Mysql数据库 -- 可支持所有版本安装教程

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

化妆品发墨西哥专线的难点解析

化妆品发往墨西哥专线的难点主要包括以下几个方面: 1. 物流监管:墨西哥对化妆品的进口有严格的监管和法规要求,包括产品注册、标签规定、成分审批等。化妆品属于特殊的进口商品,需要满足墨西哥卫生部门(COFEPRIS)的相关规定&#…

基于springboot实现小学家校一体“作业帮”系统项目【项目源码】计算机毕业设计

基于springboot实现小学家校一体“作业帮”系统演示 Java语言简介 Java是由SUN公司推出,该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称,也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具…

科研绘图与学术图表绘制:从入门到精通

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 一、入门篇 1.1 软件介…

cryptopp Base64Encoder \n问题

1、问题: new Base64Encoder(new StringSink(out_base)) 调用库函数Base64Encoder进行base64加密后确认多出来了\n 2、原因 base64加密的问题, 由于base64一行不能超过76字符, 超过就会添加回车换行符(在Windows中是 \r\n , 在Linux中是 \n ) 3、解决 方法一、给定参…

对这套BI零售数据分析方案心动,是零售人天性

零售数据分析做了这么多年,难道真的没累积点经验,摸索出一条又快又能满足绝大多数需求的数据分析捷径?别人不知道,奥威BI还真就有这么一套标准化的BI零售数据分析方案,不管是服装零售、医药连锁、商超都能利用这套方案…

【JY】ANSYS Workbench在减隔震应用分析中的单元积分技术笔记

写在前文 尽管减隔震技术与有限元结合取得了众多成果,但仍面临诸多挑战,如材料非线性、模型不确定性等等。减隔震设计除了常规的宏观结构设计采用SAP2000、Etabs、Midas、SSG、Paco-SAP 或 YJK\PKPM等。 【JY】各类有限元软件计算功能赏析与探讨 我们需要…

为什么PDF文件不能打印?

正常的PDF文件是可以打印的,如果PDF文件打开之后发现文件不能打印,我们需要先查看一下自己的打印机是否能够正常运行,如果打印机是正常的,我们再查看一下,文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…

TCP为什么需要三次握手和四次挥手?

面试官:说说TCP为什么需要三次握手和四次挥手? 一、三次握手 三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包 主要作用就是为了确认双方的接收能力和发送能力是否正常、…

新生儿奶瓣:原因、科普和注意事项

引言: 新生儿奶瓣是一种婴儿口腔内的常见现象,它通常被视为正常的生理发展。然而,对于一些新父母而言,了解奶瓣的原因以及如何处理是至关重要的。本文将科普新生儿奶瓣的原因,提供相关信息,并为父母和监护…

Python 如何实现迭代器设计模式?什么是迭代器(Iterator)设计模式?

迭代器(Iterator)设计模式是一种行为设计模式,用于提供一种方法来访问一个聚合对象中的各个元素,而不暴露该对象的内部表示。它定义了一种迭代的方式,允许客户端按序访问聚合中的元素,而无需了解底层的数据…

4步轻松搞定烦人的WPS右键菜单

安装WPS的时候不小心勾选了很多默认选项,结果右键菜单惨不忍睹,一些没用的菜单占据了大量篇幅,使用起来十分不方便。考虑360,火绒的右键菜单管理功能没搞定,最后在WPS的管理功能的隐藏角落找到了设置功能,给…

模拟实现C语言--strstr函数

模拟实现C语言–strstr函数 文章目录 模拟实现C语言--strstr函数一、strstr函数是什么?二、使用示例三、模拟实现3.1 模拟实现1 一、strstr函数是什么? 在目标字符串中寻找字符串 char * strstr ( const char *str1, const char * str2);根据语法结构&…

Java 反射设置List属性

使用 Java 反射可以动态地设置对象的属性值,包括 List 类型的属性。以下是一个示例代码,演示如何通过反射设置 List 类型的属性: 假设有一个类 Person,包含一个 List 类型的属性 names: java public class Person { …

升降机械比例多路阀放大器

升降机械比例多路阀放大器是一种在液压系统中控制多个执行元件的运动方向和速度的设备。这种放大器的特点是与负载无关,且为无极的。它通常配置外置比例放大器,用于控制一个或同时操作的多个液压耗能器的运动方向和速度。 被广泛应用于升降机械中的比例…

笔记本分屏怎么操作?3个方法提高工作效率!

“有朋友知道笔记本怎么才能实现分屏吗?我在工作时,经常需要来回切换屏幕,效率真的太低了,有什么方法可以实现两个屏幕同时使用吗?” 在现代生活中,多任务处理已成为常态,而笔记本分屏技术为用户…

数据结构-散列表

列表(Hash Table),又称哈希表,是一种数据结构,特点是:数据元素的关键字与其存储地址直接相关 例:有一堆数据元素,关键字分别为{19,14,23&#xff…

雅虎、美客多、Temu、Allegro、亚马逊跨境平台选品技巧方法,测评养号攻略。

(1) Best Sellers选品法 这个方法顾名思义,就是大家熟悉的热销榜单选品法。 不做过多解释,在自己熟悉的品类,隔几天就会观察一下前100名里有没有冒出什么新品。 它和现有的产品相同还是不同,自己做哪些搭配或者迭代…

【ERROR】ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND No package.json

1、报错 启动项目的时候,报这个错误,是因为根目录错误,查看,根目录是否错误。

设计大咖亲授:Figma中文环境设置全攻略!

作为UI设计师,你一定很熟悉Figma,Figma是一款专注于UI/UX设计的在线协作工具,使用非常高效方便,不需要下载和安装。它只需要通过浏览器编辑,在国外很受欢迎。但是Figma对于国内的小伙伴来说,使用Figma有一定…