他们是一个大统一的伐木理论吗?我们要开发一个吗?问题(只是为了表明这不是讨论:),我该如何改进以下内容? (请注意,我主要生活在嵌入式世界中,但也欢迎非嵌入式建议)
如何记录,何时记录,记录什么,如何处理日志文件?
你如何记录 - 我通常有宏,#ifdef TESTING,有点像。它们写入RAM并且低优先级进程在系统空闲时将它们写出来(使用UDP,因为我使用嵌入式系统)
您何时登录 - 与投票相同,早期和经常。在每个(重大)程序事件中,我都会记录不同的级别。收到的事件,事务成功/失败,数据更新等
你记录什么 - 致命/错误/警告/信息/调试/跟踪包含在When to use the different log levels?
中你如何处理日志文件 - 1)保留它们(在CVS中),通过和失败2)捕获所有内容并稍后过滤以防万一我无法重复问题。我有工具按“级别”(致命/错误/等),进程,文件等过滤日志。并绘制消息序列图,转储数据结构,绘制内存使用的直方图 - 我缺少什么?
嗯,二进制或ascii日志文件格式? Ascii比较庞大,但二进制需要更多处理。我已经做了两个,目前我使用ascii
问题 - 我错过了什么,我怎么能改进这个?
答案 0 :(得分:2)
我错过了什么,我怎么能 改善这个?
嗯,二进制或ascii日志文件格式? Ascii比较庞大,但二进制需要 更多的处理。我做了两个, 目前我使用的是ascii
ASCII很好。通常,日志用于调试目的。人类可读的形式可以简化并加快速度。 但是,如果您的日志主要用于记录稍后用于分析和生成报告的信息(例如统计数据或延迟等),则优选二进制格式。您可以向前迈出一步,使用自定义格式以及基于索引的排序的数据库服务,其中索引可以是事件类型的时间元组。
-
答案 1 :(得分:2)
您可以通过许多不同的方式“检测”您的代码,从启动/关闭事件到单个机器指令执行(使用处理器仿真器)。在所有可能性中,有什么值得做的?不要为了完整而这样做;有一个特定的目标。如果您愿意,可以使用商业案例,并获得您期望获得的福利。 E.g:
我认为没有统一的统一日志理论,因为你所做的将取决于许多细节:
对于ASCII与二进制文件,我通常更喜欢保持日志记录简单,并将任何好的演示文稿放在解码数据的PC应用程序中。在PC软件(用Python编写)而不是嵌入式系统本身中创建用户友好的演示文稿通常更容易。
答案 2 :(得分:2)
可能有用的一件事是拥有一个“maybeLogger”对象,该对象将接受可能成功或不成功的操作的日志记录,然后如果操作成功或以无趣的方式失败,则放弃这些记录,或者如果有趣的话,请记录它们。这在.net这样的东西上比较容易。在嵌入式系统中,如果要记录的内容数量足够小以适应自由RAM,它只能非常容易地完成,但是人们可能会使用基于垃圾收集的方法来保存闪存中的内容(有一个'用于新日志条目的flash中的数据流,以及用于确认有趣的数据的另一个数据流;定期将已知从第一个流到第二个流的数据移动到第二个流中。
答案 3 :(得分:1)
这是我的0.02美元。
我只在遇到问题时才进行记录,并且需要跟踪来源。通常这与客户的环境有关,所以我不能只附加调试器。我的解决方案是启用Telnet端口并使用它来打印关于程序所在位置和变量值的语句。
我只做ASCII,因为它是通过telnet。
telnet的另一个方面是它非常简单。它是一个TCP端口,文本被抛出。除了正常的TCP头痛之外,处理很少。
我一收到日志文件就会被转储,因为我没有尝试捕获并保存telnet会话。我想我可以使用WireShark,但我不需要该会话的历史记录。我只需要找到问题并验证修复。