2019独角兽企业重金招聘Python工程师标准>>>

如果项目上过线的话,那你一定知道Log是多么重要。
  为什么说Log重要呢?因为上线项目不允许你调试,你只能通过Log来分析问题。这时打一手好Log的重要性绝不亚于写一手好代码。项目出问题时,你要能拿出Log证明自己负责的部分没有问题,如果是自己的问题,要从Log里快速找出错误原因。如果没有从Log里找出错误原因,那一定是一件很悲催的事情,特别是在bug不容易重现的情况下。那简直就是叫天天不灵,叫地地不应啊。
  一.Log级别
  Log最常用的级别就是DEBUG,INFO,WARN,ERROR,其他的很少用。如何运用合适的Log级别也是非常重要的,在不该用ERROR的地方用了ERROR,可能会给你带来额外的麻烦。下边仅根据自己的使用习惯,分别说一下我对各种级别的理解。
  1.ERROR:
  ERROR是错误的意思,但不代表出现异常的地方就该打ERROR。我认为ERROR是相对程序正确运行来说的,如果出现了ERROR那就代表出问题了,开发人员必须要查一下原因,或许是程序问题,或许是环境问题,或许是理论上不该出错的地方出错了。总之,如果你觉得某个地方出问题时需要解决,就打ERROR,如果不需要解决就不要打ERROR。
  举例来说,如果有一个接口。调用者传过来的参数不在你的接受范围内,在这种情况下你不能打ERROR,因为传什么值是用户决定的,并不影响程序正确运行。想象一下,如果你的服务器上有监控程序的话,检测到ERROR或WARN就报警,参数错误你也打ERROR,那运维人员会疯掉的。
  如果做一个对讲机,在解析语音数据包时出错了,那就要打ERROR了,因为这个是理论上不该出错的地方,要不就是你的解析代码有问题,要不就是开发人员在拼凑语音包时存在问题,这个时候需要你来找出问题的原因。所以应该打ERROR。
  2.WARN:
  WARN是指出现了不影响程序正确运行的问题,WARN也是问题但不影响程序正常运行,如果WARN出现的过于频繁或次数太多,那就代表你要检查一下程序或环境或依赖程序是否真的出问题了。
  假如你访问一个接口,设置了一个超时,超时之后会抛异常,你在try块里不该打ERROR也不该打INFO来无视它,这时你应该打WARN,紧紧是警告一下,如果超时过多那就该检查一下了,是不是对方接口有问题了或者是网络环境出问题了。
  3.INFO和DEBUG:
  ERROR和WARN是指有问题,而INFO和DEBUG就是指一般的信息了。在程序出问题时,如果这条log可以帮助你分析问题或查看程序的运行情况,那就应该打个INFO。如果仅仅是为了在调试阶段查看程序是否运行正确那就要打DEBUG。前边讨论的接口参数错误问题,就应该打个INFO了,调用者说你的接口总是返回错误代码,你可以告诉他,是他的哪个参数传错了。
  二.如何打
  1.log必备信息
  在每一条log中都要将时间、类名及函数名,可以的话将行号也打印出来(不建议手写行号),像java的log4j就是不错的。
  2.函数开始结束处
  在重要函数的开始结束出应该打上log ,这样在看log时会比较直观,什么时候开始什么时候结束就会一目了然,万一中间出异常导致程序退出了,也知道是在哪个函数突然中断的。也同样适用于一个重要逻辑块的开始结束。
  3.返回结果
  尽量在重要函数或web接口的每个返回分支打印返回结果。在出现不好分析的异常时,从细节下手,这时log会派上用场。如果跟合作方在数据方面出现争议也可以及时拿出证据。
  4.添加Exception异常的捕获
  如果你在代码中捕获了某种异常,那你要在try块后添加Exception的捕获,以防出现运行时异常中断程序。
  5.务必打印堆栈信息
  在异常捕获代码中务必要将堆栈信息打印出来,否则打了那么多的log可能会功亏一篑。
  6.多线程的log
  在多线程的程序中,log最好要标记thredId,否则可能不知道是哪个线程的作业,也无法有条理的来观察一个线程。
  7.成功失败标志
  如果某个函数是做一件比较关键的事情,那么这件事情成功还是失败了,要打印log,否则关键事件运行结果如何都拿不出证据的话,实在是不能让人信服。
  8.前后log的关系
  如果是web程序或接口,那log就不是按照你预定的顺序出现的,可能是好几个响应的log穿插在一起的。代码里如果有几条log前后存在一定的数据关系,那么要将这几条log的关联信息打出来,用来确定是针对同一个响应的。如果没有明确的标志,很难说后边的log跟前边的log是同一个响应或者是针对同一条数据。
  9.关于耗时
  访问一个第三方接口、上传下载文件等可能耗时的操作,都要记录完成这个操作所耗的时间。否则程序性能出了问题,你不知道是网络原因呢,还是你调用的第三方接口性能出现问题呢,还是你自己程序的问题呢。
  10.关于数量
  涉及到数量的操作要打印log,比如查询数据库和批量拷贝文件、上传下载、批量格式转换等批量操作,设计到的数量要打印出来。
  总之,打log的目的是为了迅速排错或在有争议时拿出证据证明自己。基于这个目的,log不在多,只要抓住一切对自己有利的信息,就可以了。
  想起其他的再继续补充吧,欢迎大家拍砖补充。
  本人学识尚浅,写文目的是为了得到大家指点。 倘若文章帮到了您,那真是好极了。

转载于:https://my.oschina.net/u/1418722/blog/202557

项目信息追踪(Log)相关推荐

  1. 策略 | 通过 NFTScan 进行 NFT 投资组合的管理和信息追踪

    随着 NFT 领域的不断发展,市场的扩大和投资者的增加,追踪和管理这些 NFT 资产变得越来越复杂,无论是新手还是资深投资者都需要借助一些实时数据作为基础来判断依据,所以一个能够信息追踪和分析 NFT ...

  2. ApiSix 开启SkyWalking插件,实现链路信息追踪

    ApiSix 开启SkyWalking插件,实现链路信息追踪 1 ApiSix开启SkyWalking插件 1.1 修改config.yml配置文件 1.2 在路由中开启SkyWalking插件 2 ...

  3. 网络空间安全之信息追踪——学习笔记 利用门户网站,综合信息追踪

    企业信息追踪与防护: 对于一个公司来说,只要牵扯到公司任一信息,都可以称之为公司的机密文件! 知名门户网站搜索: 新华网:http://www.xinhuanet.com/ 党中央直接部署的,重大影响 ...

  4. 笔记-项目管理基础知识-项目信息(工作绩效信息、绩效数据、绩效报告)

    项目信息 ▲▲▲▲▲ 工作绩效数据 在执行项目工作的过程中,从每个正在执行的活动中收集到的原始观察结果和测量值.如:工作完成百分比.质量和技术绩效测量值.进度活动的开始和结束日期.变更请求的数量.缺陷 ...

  5. IntelliJ IDEA 怎么知道项目信息_如何重新打开已经移除的项目_如何关闭和删除项目

    文章目录 一个窗口只管理一个项目 如何打开已经移除的项目 Open 和 Import 的简单区别 关闭项目 如何删除项目 IDEA 怎么知道项目信息 这里要特别理解一个问题,硬盘上的项目文件必须在 I ...

  6. c++ 如何获取移动硬盘型号信息_工程销售,如何高效快速获取项目信息

    怎么获取工程信息,对于做建筑工程的销售来说,基本都知道,无非就是通过扫街.网上 搜索.购买第三方工程信息服务.或者他人介绍(亲朋好友.客户.同事.设计师等).在怎 么找项目信息方面?每个人都有自己的方 ...

  7. 项目管理工具project软件学习(一) - 项目信息设置

    1 . 下载project软件,有条件的可以自己下载破解版.我没下载到,所以直接淘宝花了5块钱买了个project2019密钥, 然后他会给我发个安装文件,省事 2.  安装完,打开project,新 ...

  8. 房产管理信息系统 oracle,房地产企业项目信息管理系统|案场管理系统

    房地产企业项目信息管理系统作为以数据管理作为基础的业务系统类型,数据库管理系统是本系统的实现基础保障. 案场管理系统使用.NET作为开发框架,为了更好的支持Windows平台,我们继续使用微软设计开发 ...

  9. 用c语言实现简单的项目信息管理系统(单向链表实现)

    这个其实是我之前为了进入学校的实验室而写的一个小项目,关于需要实现的功能(在菜单里)和具体思路就都写在代码里了,所以直接看完整的代码: #include<stdio.h> #include ...

最新文章

  1. 关于Windows Vista的系统修复
  2. Sed教程(三):模式缓冲区、模式范围
  3. C#设置WebBrowser IE浏览器版本
  4. ap模式和sta模式共存_锐捷AP缺省VLAN和用户VLAN那些事儿 | 运维实战家
  5. Java需要掌握的底层知识_Java程序员应该掌握的底层知识
  6. 泡泡提示加强版 完美支持XHTML(JavaScript)--zhuan
  7. html静态网页模板_aspnetcore 实现简单的伪静态化
  8. php git server,server.php
  9. MySQL Front远程连接数据库
  10. Python-datetime模块
  11. Ubuntu下定时重启程序
  12. 三星s8 android9.0官方rom,三星S8港版安卓9官方固件rom刷机包:TGY-G9500ZHU3DSD3
  13. UltraISO制作win10光盘启动
  14. excel 度分秒转度
  15. 计算机替换字体怎么操作,电脑怎么更换字体-电脑更换字体的方法 - 河东软件园...
  16. [转] 粤语八级题,你会做岩几多题??
  17. php ligerui 导出excel,LigerUI表格树的使用
  18. 保留至百位并且向上取整 例如:125631 >>125700
  19. 【89元】爱乐生 上臂式语音电子血压计测量仪 家用医用全自动智能大屏 老人尊享 LZX-B1681-C标准款...
  20. 删除Linux虚拟机中的/dev/sdb磁盘步骤

热门文章

  1. python 空指针_Python ctypes模块:扩展指针数组时进行NULL指针访问
  2. 接收不到其他机器发来的报文_大厂真实案例:线上四台机器同一时间全部 OOM......
  3. log4j:WARN Please initialize the log4j system properly
  4. 超详细mysql left join,right join,inner join用法分析
  5. 分布式消息系统Kafka初步
  6. Nexus配置内部仓库
  7. python回顾(九)——函数高级,递归函数,匿名函数
  8. Exchange EMC打开出错 解决
  9. 火星人乘坐核动力飞船回故乡
  10. OpenCV条码(6)简单实现