背景: 我继承了一个Web应用程序,旨在创建本地和远程设备之间的即时连接.最近有大量的移动部件:应用程序本身发生了重大变化; 开发工具链刚刚更新; 本地和远程设备都已"修改"以支持这些变化.
好的一面是它有一个合理的日志记录系统,可以将调试消息写入文件,它将同时记录到文件和实时用户屏幕.我有机会重新使用整个日志/调试机制.
例子:
所有消息都带有时间戳,并以严重性级别作为前缀.
日志是给客户的.他们记录系统对他/她的请求的回应.
任何标识问题的日志也都会提出解决方案.
调试适用于开发人员和技术支持.他们揭示了系统内部.
调试指示生成它们的函数和/或行.
客户可以动态调整调试级别以设置详细程度.
问题:您作为开发人员或被视为消费者的哪些最佳实践可以生成有用的日志和调试?
编辑:到目前为止很多有用的建议,谢谢!为了澄清:我更感兴趣的是什么日志:内容,格式等 .--而这样做的原因-不是具体的工具.
您看到的最好的日志对他们最有帮助的是什么?
谢谢你的帮助!
有些人从不使用调试器,而是记录所有内容.这是不同的哲学,你必须做出自己的选择.你可以找到许多建议像这样,还是这一个.请注意,这些建议与语言无关......
编码恐怖家伙得到了一篇关于伐木问题的有趣帖子,以及为什么滥用伐木在某些条件下浪费时间.
我只是认为日志记录用于跟踪可能保留在生产中的内容.调试用于开发.也许这是一种看待事物的过于简单的方式,导致一些人使用日志进行调试,因为他们无法忍受调试器.但是调试器模式也可能浪费时间:你不必像某种测试用例那样使用它,因为它没有写下来并且会在调试会话后消失.
所以我认为我对此的看法是:
使用日志框架(log4系列工具)通过开发和生产级别在开发和生产环境中记录必要且有用的跟踪
调试模式用于特殊奇怪的情况,当事情失控时
测试用例非常重要,可以节省在迷宫般的迷宫调试过程中花费的时间,用作反向回归方法.请注意,大多数人不使用测试用例.
编码恐怖表示抵制记录一切的倾向.这是对的,但我已经看到一个hudge应用程序以一种漂亮的方式(通过数据库)完全相反......
使用任何日志框架完成absolutley最有价值的事情是"一键式"工具,即使应用程序部署在属于客户的计算机上,也会收集所有日志并将其邮寄给我.
并在记录内容方面做出了很好的选择,这样您就可以粗略地遵循应用程序中的主要路径.
作为框架,我使用了标准(log4net,log4java,log4c ++)
当已经有一个好的开箱即用时,不要实现自己的日志框架.大多数人只是重新发明轮子.
不要混淆日志记录,跟踪和错误报告,我知道的一些人,它创建了一个日志文件的地狱,以获取我想要的信息.
如果我想把所有东西都弄出来,我会分成以下几点:
跟踪 - >使用该阶段的输入和输出数据(最大和最大的文件)转储每个操作和步骤(带时间戳)
记录 - >仅记录业务流程步骤,客户端进行查询,因此不再记录查询条件和输出数据.
错误报告/调试 - >记录的异常详细说明发生的位置,时间戳,可能的输入/输出数据,用户信息等
这样,如果发生任何错误并且错误/调试日志不包含我喜欢的足够信息,我总是可以做一个grep -A 50 -B 50 'timestamp' tracing_file
以获得更多细节.
编辑: 正如也曾经说过的那样,坚持像python的内置日志记录模块这样的标准软件包总是很好.除非语言中没有标准库,否则滚动自己并不是一个好主意.我喜欢在一个小函数中包装日志记录,通常采用消息和值来确定它进入哪个日志,即.1 - 跟踪,2 - 记录,4 - 调试,因此向所有3等发送7个值的值.