大统一的伐木理论

时间:2010-01-10 01:06:12

标签: testing logging embedded

他们是一个大统一的伐木理论吗?我们要开发一个吗?问题(只是为了表明这不是讨论:),我该如何改进以下内容? (请注意,我主要生活在嵌入式世界中,但也欢迎非嵌入式建议)

如何记录,何时记录,记录什么,如何处理日志文件?

你如何记录 - 我通常有宏,#ifdef TESTING,有点像。它们写入RAM并且低优先级进程在系统空闲时将它们写出来(使用UDP,因为我使用嵌入式系统)

您何时登录 - 与投票相同,早期和经常。在每个(重大)程序事件中,我都会记录不同的级别。收到的事件,事务成功/失败,数据更新等

你记录什么 - 致命/错误/警告/信息/调试/跟踪包含在When to use the different log levels?

你如何处理日志文件 - 1)保留它们(在CVS中),通过和失败2)捕获所有内容并稍后过滤以防万一我无法重复问题。我有工具按“级别”(致命/错误/等),进程,文件等过滤日志。并绘制消息序列图,转储数据结构,绘制内存使用的直方图 - 我缺少什么?

嗯,二进制或ascii日志文件格式? Ascii比较庞大,但二进制需要更多处理。我已经做了两个,目前我使用ascii

问题 - 我错过了什么,我怎么能改进这个?

4 个答案:

答案 0 :(得分:2)

  

我错过了什么,我怎么能   改善这个?

  • 异步日志记录。
  • 对同一进程使用多个日志文件以进行不同的日志记录抽象。例如进程的活动记录在普通日志文件中。并且流程的统计信息(您可能感兴趣的定期统计信息)将记录在单独的统计信息日志文件中。
  

嗯,二进制或ascii日志文件格式?   Ascii比较庞大,但二进制需要   更多的处理。我做了两个,   目前我使用的是ascii

ASCII很好。通常,日志用于调试目的。人类可读的形式可以简化并加快速度。 但是,如果您的日志主要用于记录稍后用于分析和生成报告的信息(例如统计数据或延迟等),则优选二进制格式。您可以向前迈出一步,使用自定义格式以及基于索引的排序的数据库服务,其中索引可以是事件类型的时间元组。

-

答案 1 :(得分:2)

您可以通过许多不同的方式“检测”您的代码,从启动/关闭事件到单个机器指令执行(使用处理器仿真器)。在所有可能性中,有什么值得做的?不要为了完整而这样做;有一个特定的目标。如果您愿意,可以使用商业案例,并获得您期望获得的福利。 E.g:

  • 深入了解CPU任务执行时间/模式以实现优化(如果您需要提高性能)。
  • 深入了解其他系统以解决系统集成问题(例如,当您的VoIP盒连接到特定对等体时,您的VoIP盒会发送和接收哪些消息?)
  • 洞察错误的性质(用于现场诊断)
  • 援助发展
  • 帮助进行验证测试

我认为没有统一的统一日志理论,因为你所做的将取决于许多细节:

  • 数据量
  • 数据类型
    • 活动
    • 流媒体音频/视频
  • 可用存储空间
    • 存储速度
    • 存储容量
  • 提取数据的可用渠道
    • 带宽
    • 费用
    • 状况
      • 互联网连接24×7
      • 需要访问网站
      • 在填写OHS文件后,需要解锁生锈的大门,爬梯子到屋顶,插上电缆
      • 需要等到南极冬季结束,冰盖解冻
  • 随机访问与线性访问(例如,如果你压缩它,你需要从头开始读取解压缩并访问一些随机点吗?)
  • 需要在错误条件下存活
    • 看门狗重新启动
    • 可能的数据损坏
      • 由于电源供应不足
      • 由于存储介质不可靠
      • 需要在飞机失事中幸存下来

对于ASCII与二进制文件,我通常更喜欢保持日志记录简单,并将任何好的演示文稿放在解码数据的PC应用程序中。在PC软件(用Python编写)而不是嵌入式系统本身中创建用户友好的演示文稿通常更容易。

答案 2 :(得分:2)

可能有用的一件事是拥有一个“maybeLogger”对象,该对象将接受可能成功或不成功的操作的日志记录,然后如果操作成功或以无趣的方式失败,则放弃这些​​记录,或者如果有趣的话,请记录它们。这在.net这样的东西上比较容易。在嵌入式系统中,如果要记录的内容数量足够小以适应自由RAM,它只能非常容易地完成,但是人们可能会使用基于垃圾收集的方法来保存闪存中的内容(有一个'用于新日志条目的flash中的数据流,以及用于确认有趣的数据的另一个数据流;定期将已知从第一个流到第二个流的数据移动到第二个流中。

答案 3 :(得分:1)

这是我的0.02美元。

我只在遇到问题时才进行记录,并且需要跟踪来源。通常这与客户的环境有关,所以我不能只附加调试器。我的解决方案是启用Telnet端口并使用它来打印关于程序所在位置和变量值的语句。

我只做ASCII,因为它是通过telnet。

telnet的另一个方面是它非常简单。它是一个TCP端口,文本被抛出。除了正常的TCP头痛之外,处理很少。

我一收到日志文件就会被转储,因为我没有尝试捕获并保存telnet会话。我想我可以使用WireShark,但我不需要该会话的历史记录。我只需要找到问题并验证修复。