一直在嵌入式行业,熟悉嵌入式的朋友都很了解嵌入式设备上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. 前端_vue-cli+element-ui+AceEditor+codemirror+electron-vue

    因项目工作需要,目前在研究前端的一些知识.主要想实现一个类似于webstorm,可以实现对本地文件进行增删改查等操作的IDE.下面通过几个专题,循序渐进,对某一些部分进行总结,希望能对你有帮助.(网上 ...

  2. 《windows核心编程系列》五谈谈线程基础

    线程基础 与前面介绍的进程一样,线程也有两部分组成.一个是线程内核对象.它是一个数据结构,操作系统用它来管理线程以及用它来存储线程的一些统计信息.另一个是线程栈,用于维护线程执行时所需的所有函数参数和 ...

  3. [POI2004]GRA

    Description 让我们考虑一个在m x 1 的板子上玩的游戏,板子被从1 到 m编号. 现在板子上有n 个棋子, 每个都严格占据板子上的一个格子. 没有一个棋子占据格子m. 每个单独的移动遵循 ...

  4. 解决okHttp使用https抛出stream was reset: PROTOCOL_ERROR的问题

    昨天在做Android接口调用的时候,api接口是https的,用okhttp抛出: okhttp3.internal.http2.StreamResetException: stream was r ...

  5. CF940D Alena And The Heater

    思路: 模拟. 实现: #include <bits/stdc++.h> using namespace std; const int INF = 1e9; ], n; string b; ...

  6. 【JavaScript】随机生成10个0~100的数字

    随机生成10个0~100不重复的数字(包含0和100): 需要用到的知识点:随机数 去重 下面放代码 <!DOCTYPE html> <html> <head> & ...

  7. MVC中使用MVCPager简单分页

    一.建立数据库以及建立MVC项目 自己随便建立一个数据库,并且添加数据.我建立的数据库如下. 二.建立LINQ to SQL映射. 然后一步步点确定 三.编写代码 在Controllers中建立控制器 ...

  8. Objective-C Foundation 框架 Example :Looking for Files 查找文件

    Objective-C Foundation 框架    Example :Looking for Files  查找文件 NSFileManager. The NSFileManager class ...

  9. 如何参与一个GitHub开源项目?

    如何参与一个GitHub开源项目? 摘要:本文是Github官如何参与一个GitHub开源项目方给出的参与Github上开源项目的一些指导,对希望加入开源社区的开发者是一个不错的参考. 最近一年开源项 ...

  10. HTML5——动画延迟的另外一种方式

    https://www.cnblogs.com/hhhhhh/p/5758167.html