关于昨天程序出差我找bug的过程记录

昨天才程序

https://www.cnblogs.com/pythonywy/p/11006273.html

├── xxxx
│ ├── src.py
│ └── fil_mode.py
│ └── data_time.py
│ └── loading.py
│ └── data_time.py
│ └── logger.py

src.py与打印日志相关片段

if __name__ == '__main__':
logger_start('程序主界面')
while True:
print("\033[0;31;44m\t\t杨大爷超市欢迎您\t\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入0进入注册界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入1进入登入界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入2进入充值界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入3进入余额查询界面\t\t\033[5m")
print("\033[0;30;42m\t\t输入4进入购物界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入5进入解冻界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入q退出程序 \t\t\t\t\033[5m")
print(38 * '-')
user_shopping_chiose = input('请输入你要选择的功能')
if user_shopping_chiose not in msg_dict:
print('请好好输入')
continue
elif user_shopping_chiose=='q':
print('再见')
logger_end('程序主界面')
break
else:
logger_start(f'{app_name_dict[user_shopping_chiose]}')
msg_dict[user_shopping_chiose]()
logger_end(f'{app_name_dict[user_shopping_chiose]}')

我将其中打印日志出现问题的地方运行,其他地方注释掉

if __name__ == '__main__':
#logger_start('程序主界面')
while True:
print("\033[0;31;44m\t\t杨大爷超市欢迎您\t\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入0进入注册界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入1进入登入界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入2进入充值界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入3进入余额查询界面\t\t\033[5m")
print("\033[0;30;42m\t\t输入4进入购物界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入5进入解冻界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入q退出程序 \t\t\t\t\033[5m")
print(38 * '-')
user_shopping_chiose = input('请输入你要选择的功能')
if user_shopping_chiose not in msg_dict:
print('请好好输入')
continue
elif user_shopping_chiose=='q':
print('再见')
logger_end('程序主界面')
break
else:
logger_start(f'{app_name_dict[user_shopping_chiose]}')
msg_dict[user_shopping_chiose]()
#logger_end(f'{app_name_dict[user_shopping_chiose]}')

生成的日志

top_up程序启动时间:2019-06-12 17:37:53  #运行一次top_up功能

top_up程序启动时间:2019-06-12 17:37:55  #运行两次top_up功能
top_up程序启动时间:2019-06-12 17:37:55 top_up程序启动时间:2019-06-12 17:37:57 #运行三次top_up功能
top_up程序启动时间:2019-06-12 17:37:57
top_up程序启动时间:2019-06-12 17:37:57 top_up程序启动时间:2019-06-12 17:37:58 #运行四次top_up功能
top_up程序启动时间:2019-06-12 17:37:58
top_up程序启动时间:2019-06-12 17:37:58
top_up程序启动时间:2019-06-12 17:37:58

我们发现他运行后内侧应该还存在日志相关函数,我们这时候看看原来的函数

logger.py

def logger_start(app):
logger_login = logging.getLogger('start')
fli_show = logging.FileHandler('app.log')
logger_format = logging.Formatter('%(message)s程序启动时间:%(asctime)s',
datefmt='%Y-%m-%d %X' )
fli_show.setFormatter(logger_format)
logger_login.addHandler(fli_show)
logger_login.setLevel(10)
logger_login.info(app) #这时候我又三种想法,
#第一种把函数return出来,每次赋予不同的变量名,这里可以用时间生成函数来进行保证每次函数名不一样
#第二种找可能会出现相同地方'logger_login'这个名字
#第三种找可能会出现相同地方logging.getLogger('start')中('start')这个名字

我选择最容易修改的第三种进行修改

import logging
from data_time import data_time
def logger_login(user):
logger_login = logging.getLogger(data_time()) #这是我自定义的一个函数返回值是当前时间每次都会不同
fli_show = logging.FileHandler('user_login.log')
logger_format = logging.Formatter('登入时间:%(asctime)s %(levelname)s-用户:%(message)s',
datefmt='%Y-%m-%d %X' )
fli_show.setFormatter(logger_format)
logger_login.addHandler(fli_show)
logger_login.setLevel(10)
logger_login.info(user) def logger_exit(user):
logger_login = logging.getLogger(data_time())
fli_show = logging.FileHandler('user_login.log')
logger_format = logging.Formatter('退出时间:%(asctime)s %(levelname)s-用户:%(message)s',
datefmt='%Y-%m-%d %X' )
fli_show.setFormatter(logger_format)
logger_login.addHandler(fli_show)
logger_login.setLevel(10)
logger_login.info(user) def logger_start(app):
logger_login = logging.getLogger(data_time())
fli_show = logging.FileHandler('app.log')
logger_format = logging.Formatter('%(message)s程序启动时间:%(asctime)s',
datefmt='%Y-%m-%d %X' )
fli_show.setFormatter(logger_format)
logger_login.addHandler(fli_show)
logger_login.setLevel(10)
logger_login.info(app) def logger_end(app):
logger_login = logging.getLogger(data_time())
fli_show = logging.FileHandler('app.log')
logger_format = logging.Formatter('%(message)s程序关闭时间:%(asctime)s',
datefmt='%Y-%m-%d %X' )
fli_show.setFormatter(logger_format)
logger_login.addHandler(fli_show)
logger_login.setLevel(10)
logger_login.info(app) def logger_shopping(user,car):
logger_login = logging.getLogger(data_time())
fli_show = logging.FileHandler('user_shopping.log')
logger_format = logging.Formatter('%(asctime)s %(levelname)s-%(message)s',
datefmt='%Y-%m-%d %X' )
fli_show.setFormatter(logger_format)
logger_login.addHandler(fli_show)
logger_login.setLevel(10)
logger_login.info(user,car)

最后呢解决了

找bug的过程的更多相关文章

  1. 附加题程序找bug

    private: void Resize(int sz){ ){ return; } if(maxSize != sz){ T *arr = new T[sz]; if(arr == NULL){ r ...

  2. 第二次作业:找Bug

    引子 我真的想了一个小时,上哪里去找bug.我昨天还留意到一个bug,今天就不见了.灵光不断,我想起来了.我就要找大公司的产品的bug... 第一部分 调研, 评测 体验. <腾讯桌球>是 ...

  3. 在无法单步调试的情况下找Bug的技巧

    比如说你有一个大的模块A,其组成部分有B,C,D这3个小的模块,现在A出了一个BUG,因为某种原因的限制你无法单步调试.怎么较快地定位BUG发生的根源? 这里记录一下刚才我在找BUG的时候采用的思路, ...

  4. 年年出妖事,一例由JSON解析导致的"薛定谔BUG"排查过程记录

    前言 做开发这么多年,也碰到无数的bug了.不过再复杂的bug,只要仔细去研读代码,加上debug,总能找到原因. 但是最近公司内碰到的这一个bug,这个bug初看很简单,但是非常妖孽,在一段时间内我 ...

  5. 海王星给你好看!FineUI v4.0公测版发布暨《你找BUG我送书》活动开始(活动已结束!)

    <FineUI v4.0 你找BUG我送书>活动已结束,恭喜如下三位网友获得由 FineUI 作者亲自翻译的图书<jQuery实战 第二版>! 奋斗~ 吉吉﹑ purplebo ...

  6. 找BUG

    找一找BUG 一段代码,实现一个pop,push,和getmin都是O(1)的方法. 最初源代码 伙伴代码如下,代码的地址可以通过这个访问: Ubuntu Pastebin https://paste ...

  7. 判断空间上三个点是否共线问题【找bug篇】

    判断空间上三个点是否在同一直线上[找bug篇] 作者:Vashon 时间:20150601   发布时间:20150718 一.拿到问题,首先分析并理清思路. 判断三点是否在同一条直线上需满足以下几点 ...

  8. 如何正确的找BUG

    什么是BUG 漏洞是在硬件.软件.协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统.具体举例来说,比如在Intel Pentium芯片中存在的逻辑错误,在S ...

  9. 记录一次bug解决过程:数据迁移

    一 总结 不擅长语言表达,勤于沟通,多锻炼 调试MyBatis中SQL语法:foreach 问题:缺少关键字VALUES.很遗憾:它的错误报的让人找不着北. 二 BUG描述:MyBatis中批量插入数 ...

随机推荐

  1. QT5的post Event解析

    大家都知道,QT的事件机制,查了好多网上的帖子,分析的不够到位,今天给大家分享下,我的分析,请高手指正:都知道post Event通过    QScopedPointer<QEvent> ...

  2. 网易Lofter

    作为老网虫,对网易的感情是很深的.当我知道Lofter这个东西后,曾经很兴奋要好好打理自己的博客,然而兴奋很快过了.因为Lofter无时无刻不在刷存在感.无限空间加无限图片流量,国内的服务无法做的更好 ...

  3. Android Java调用Qt写的so库

    有时候,我们反编译apk得到一个so库,如果直接使用这个so库的话,必须使用原来so库同样的package名字,才能用.这样人家反编译你的apk,就知道你侵犯了人家的版权.为了达到混淆的目的,我们可以 ...

  4. UILabel范例实现代码如下

        #import "TWO_ViewController.h" #define SCREEN_Width [[UIScreen mainScreen] bounds].siz ...

  5. Google+团队如何测试移动应用 - from Google Testing Blog

    How the Google+ Team Tests Mobile Apps by Eduardo Bravo Ortiz “移动第一”在当下已成为很多公司的口头禅.但是能够用一种合理的方法来测试移动 ...

  6. 使用Arcgis Api for Javascript 调用 本地Portal发布的WebMap

    1.环境搭建 安装Arcgis Portal 10.4,Server 10.4,DataStore ,WebAdaptor for IIS,搭建arcgis api for javascript 4. ...

  7. cookie,session,用户认证组件

    一. 绘画跟踪技术 在客户端与服务端的一次会务中,多次的请求与相应,HTTP协议是无状态协议,也就是说每个请求都是独立的!无法记录前一次请求的状态.会话跟踪技术即能够实现多次回话间信息共享的作用,HT ...

  8. Redis 学习笔记(篇二):字典

    字典 字典又称为符号表.关联数组或映射(map),是一种用于保存键值对(key-value)的数据结构. 那么 C 语言中有没有这样 key-value 型的内置数据结构呢? 答案:没有. 说起键值对 ...

  9. 【设计模式】行为型09访问者模式(Visitor Pattern)

    学习地址:https://blog.csdn.net/u012124438/article/details/70537203(参考了很多博客,只有这个讲明白了核心点) 访问者模式(Visitor  P ...

  10. jenkin+Git子模块自动拉取代码

    jenkins+Git子模块自动拉取代码 添加Git子模块 先克隆想要添加子模块的仓库git clone ssh://git@ip:port/user/project.git,这个是主目录. 进入仓库 ...