背景:我继承了一个Web应用程序,旨在创建本地和远程设备之间的即时连接。最近有大量的移动部件:应用程序本身发生了重大变化;开发工具链刚刚更新;本地和远程设备都经过“修改”以支持这些变化。
好的一面是它有一个合理的日志记录系统,可以将调试消息写入文件,它将同时记录到文件和实时用户屏幕。我有机会重新使用整个日志/调试机制。
示例:
问题:您作为开发人员或被视为消费者的哪些最佳做法可以生成有用的日志和调试?
编辑:到目前为止,有很多有用的建议,谢谢!澄清:我对要记录的内容更感兴趣:内容,格式,等 .--以及这样做的原因 - 而不是具体的工具。
你见过的最好的日志是什么让他们最有帮助?
感谢您的帮助!
答案 0 :(得分:8)
有些人从不使用调试器但会记录所有内容。这是不同的哲学,你必须做出自己的选择。您可以找到许多建议like these或this one。请注意,这些建议与语言无关......
Coding Horror guy得到an interesting post关于日志记录问题以及为什么滥用日志记录在某些条件下浪费时间。
我只是认为日志记录用于跟踪可能保留在生产中的内容。调试用于开发。也许这是一种看待事物的过于简单的方式,导致一些人使用日志进行调试,因为他们无法忍受调试器。但调试器模式也可能浪费时间:你不必像某种测试用例那样使用它,因为它没有被写下来并且会在调试会话后消失。
所以我认为我对此的看法是:
编码恐怖说抵制记录所有内容的倾向。这是对的,但我已经看到一个hudge应用程序以一种漂亮的方式(通过数据库)完全相反......
答案 1 :(得分:7)
使用任何日志框架完成的absolutley最有价值的事情是“一键式”工具,即使应用程序部署在属于客户的计算机上,也会收集所有日志并将其邮寄给我。
并在记录内容方面做出正确的选择,这样您就可以大致按照应用程序中的主要路径进行操作。
作为框架,我使用了标准(log4net,log4java,log4c ++)
当已经有一个好的开箱即用时,不要实现自己的日志框架。大多数人只是重新发明轮子。
答案 2 :(得分:7)
不要混淆日志记录,跟踪和错误报告,我知道的一些人会创建一个日志文件,以便获取我想要的信息。
如果我想把所有东西都弄清楚,我会分成以下内容:
- 追踪 - >使用输入和转储每个操作和步骤,加时间戳 该阶段的输出数据(ugliest和 最大的文件)
- 记录 - >仅记录业务流程步骤,客户端进行查询以便记录 查询标准和输出数据 仅此而已。
- 错误报告/调试 - >记录的异常详细说明了它的位置 发生,加时间戳,输入/输出 数据,如果可能,用户信息等
这样一来,如果发生任何错误并且错误/调试日志没有包含我喜欢的足够信息,我总是可以grep -A 50 -B 50 'timestamp' tracing_file
来获取更多细节。
修改强> 正如前面所说,坚持使用像python的内置日志记录模块这样的标准软件包总是很好。除非语言中没有标准库,否则滚动自己并不是一个好主意。我喜欢在一个小函数中包装日志记录,通常采用消息和值来确定它进入哪个日志,即。 1 - 跟踪,2 - 记录,4 - 调试,因此向所有3等发送7个值的值。
答案 3 :(得分:3)
我只是将您的日志系统设置为具有多个日志记录级别,对于我编写的服务,我几乎每个操作都有一个日志/审计,并且它被分配了审计级别1-5,数字越大,您获得的审计事件越多。
您可以在配置文件中设置审核级别,以便可以即时更改。
答案 4 :(得分:3)
我发现一些一般的经验法则在服务器端应用程序中很有用:
由于我是Java开发人员,我还将提供Java API和框架的经验。
<强> API 强>
我建议使用Simple Logging Facade for Java(SLF4J) - 根据我的经验,它是记录的最佳门面:
<强>实施强> 与SLF4J一起使用的最佳实现是logback - 由同一个创建SLF4J API的人编写。
答案 5 :(得分:0)
使用现有的日志记录格式,例如Apache使用的格式,然后您可以搭载许多可用于分析格式的工具。