一直在嵌入式行业,熟悉嵌入式的朋友都很了解嵌入式设备上DEBUG的麻烦,特别是一些缺乏断电工具和没有UI界面的设备。久而久之,开发一个新东西,首先就是要先搞定DEBUG手段。最近写了几个测试的python脚本用于跑些压力测试。找了些Python的DEBUG方法并加以处理,形成了方便使用的DEBUG手段。

其实Python的DEBUG LOG很简单很方便,相当于整辆车都做好了,就等你怎么开车了。而我们在C的嵌入式设备上,DEBUG都几乎需要自己造轮子,造车身。然而在Python中我们只需要import logging就可以了,而且这还是标准模块。无需额外的库。

每次跑LOG都可以生成以时间命令的LOG文件,这样就无需担心文件覆盖,重名,无法确认LOG开始时间等问题。可以参考的代码如下:

import time
import logging log_filename=r'LOG\%s_test.log'%(time.strftime('%Y%m%d%H%M%S')) logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s [line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%Y.%m.%d %H:%M:%S',#datefmt='%a, %d %b %Y %H:%M:%S',
filename=log_filename,
filemode='w') def debug_trace(str):
print(str)#如果需要在控制台打印的话。
logging.debug(str) debug_trace("test")
logging.debug("test")

生成log文件“20190102102228_test.log”,文件中的LOG如:2019.01.02 10:22:28 [line:14] DEBUG test

但是以上的写法会有个问题,lineno将不是我们想要的,一直会是debug_trace中的行号。如果直接使用 logging.debug("test"),则lineno就会期望的实际被调用的位置的行号。

我原来在C嵌入式上的一些习惯,debug时会把当前调用的函数名,行号等打印出来。所以加强版的debug trace就是如下:

 import time
import logging
import sys log_filename=r'LOG\%s_test.log'%(time.strftime('%Y%m%d%H%M%S')) logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s',
datefmt='%Y.%m.%d %H:%M:%S',#datefmt='%a, %d %b %Y %H:%M:%S',
filename=log_filename,
filemode='w') def debug_trace(str):
debug_str = sys._getframe().f_back.f_code.co_name+"() "+"Line:"+"%d"%(sys._getframe().f_back.f_lineno)+" "+str
print(debug_str)#如果需要在控制台打印的话。
logging.debug(debug_str) def main():
debug_trace("test") main()

这样打出来的LOG就可以是: 2019.01.02 10:41:10 DEBUG main() Line:20   test

Python的DEBUG LOG的更多相关文章

  1. salesforce 零基础学习(三十)工具篇:Debug Log小工具

    开发中查看log日志是必不可少的,salesforce自带的效果显示效果不佳,大概显示效果如下所示: chrome商城提供了apex debug log良好的插件,使debug log信息更好显示.假 ...

  2. 在Salesforce中通过 Debug Log 方式 跟踪逻辑流程

    在Salesforce中通过 Debug Log方式 跟踪逻辑流程 具体位置如下所示: Setup ---> Logs ---> Debug Logs ---> Monitored ...

  3. U3D Debug.log的问题

    今天在测试有yield有关的问题时,发现Debug.log()是异步输出机制.不一定会在调用后立即执行. 在C++有类似问题:std::cout 也不一定会立即输出,加上"\n"或 ...

  4. Android如何让真机显示debug log的调试信息

    真机默认是不开启debug log调试功能的,以前我一直用模拟器,模拟器默认是开启debug log调试功能的,那么如何让真机开启呢? 我用华为Ascend P6为例: 1.进入拨号界面,输入*#*# ...

  5. FND Debug Log(FND_LOG_MESSAGES)

    之前每个模块记录日志的方式都不同,都会把日志写到不同的文件中,对于User来说很麻烦,需要记住很多的配置,现在越来越多的模块使用FND Logging来存储日志,比如WIP,RCV,OAF...FND ...

  6. unity, 对于Debug.Log输出的log,可以双击定位到代码

    unity, 对于Debug.Log输出的log,可以双击定位到代码

  7. 使用Python中的log模块将loss输出到终端与保存到文件

    记得之前对深度学习中得loss输出,经常自己会将输出流重新定向到一个文件中, 比如 python main.py > & | tee log.txt 对于caffe这种c++框架而言,用 ...

  8. python打印日志log

    整理一个python打印日志的配置文件,是我喜欢的格式. # coding:utf-8 # 2019/11/7 09:19 # huihui # ref: import logging LOG_FOR ...

  9. python解析git log后生成页面显示git更新日志信息

    使用git log可以查到git上项目的更新日志. 如下两个git项目,我想把git的日志信息解析成一个便于在浏览器上查看的页面. https://github.com/gityf/lua https ...

随机推荐

  1. Windows API函数大全

    WindowsAPI函数大全(精心总结) 目录 1. API之网络函数... 1 2. API之消息函数... 1 3. API之文件处理函数... 2 4. API之打印函数... 5 5. API ...

  2. UVA 11149 Power of Matrix 构造矩阵

    题目大意:意思就是让求A(A是矩阵)+A2+A3+A4+A5+A6+······+AK,其中矩阵范围n<=40,k<=1000000. 解题思路:由于k的取值范围很大,所以很自然地想到了二 ...

  3. lavas安装

    最近在研究pwa,百度基于此写了一套开源框架lavas,学习下: 1.环境准备: lavas 安装.git安装 Node.js:https://nodejs.org/ Git:https://git- ...

  4. Android开发学习——高德地图的实现

    1.首先做好下边的准备: 1.1  http://lbs.amap.com/   注册账号 1.2  下载 定位sdk 和 地图sdk 下载后是这样的 1.3  对下载的进行解压 将他们加入 中,对每 ...

  5. iOS循环引用

    iOS循环引用 当前类的闭包/Block属性,用到了当前类,就会造成循环引用 此闭包/Block应该是当前类的属性,我们经常对Block进行copy,copy到堆中,以便后用. 单方向引用是不会产生循 ...

  6. 详解java中staitc关键字

    一.static定义 static是静态修饰符意思,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到 ...

  7. sql server 2008 r2 无法定位到数据库文件目录

    像这样,选择数据库文件时, 无法定位到文件夹目录,子目录下的都不显示.明明选择的这个文件夹里还有很多子文件夹,却显示不了. 解决方法: 在此文件夹上右击,属性-安全 添加红框中的用户就可以了.

  8. org.springframework.orm.hibernate4.support.OpenSessionInterceptor

    /* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Vers ...

  9. How to Configure YUM to Install Packages From Installation ISO (RHEL)

    1. Mount RHEL Installation ISO mkdir /media/dvd mount /dev/cdrom /media/dvd 2. Get Media ID with the ...

  10. Discuz3.1登录QQ互联显示redirect uri is illegal(100010)的解决

    QQ互联最近也是BUG不断,引起了很多用户的不满,从早前关闭群组功能,到发布2.0接口标准,引发系列站长用户的连锁反应.而Discuz从X3开始,为了应对QQ互联的2.0接口标准,采用了云平台来整合Q ...