0

我大部分时间都在用 C 编写软件。最近,我一直在研究可以归类为中间件的库。它们只需要存在就可以使两个软件进行通信。

在开发过程中,我发现分析日志可以更快、更轻松地跟踪和隔离错误。显然,我希望该库的任何生产使用都不需要经常检查日志输出。

但现实是一些错误只出现在生产环境中。造成这种情况的一个常见原因可能是库对面的实现,它正在做一些在标准方面属于灰色区域的事情。因此,需要能够分析来自生产环境的日志。

那么从中间件类型的 API 公开日志记录的最佳实践是什么?有没有关于这个主题的文献?

目前我有两个想法:

第一种是#define在我的源代码中使用 a 来控制日志记录语句的存在。在生产环境中,该库可以编译两次。一个共享对象将启用日志记录语句。另一个将在没有日志记录的情况下进行优化。通过在运行时更改动态链接的库,可以启用和禁用日志记录。

这种#define方法可行,但可能不够灵活。另外,我不是很关心性能。我采取先实施,后优化的方法。

我的第二种方法是坚持 UNIX 风格的哲学,只在库中有一个函数,用于通过传入文件描述符来启用日志记录。这将使日志记录在运行时启用或禁用。如果设置了文件描述符,则启用日志记录。如果未设置,则不进行记录。显然,这有其自身的缺点。但这是一种简单的方法。

4

1 回答 1

2

以下是我的考虑:

  • 日志必须始终存在

通常当客户遇到问题时,您首先需要的是日志。

  • 日志消息应因级别而异

您应该在代码中添加尽可能多的日志语句,只要您觉得有用(提前考虑)。然而,并不是所有的陈述都是有用的。应该有一种方法可以按问题级别或命名空间来区分消息,这样您就可以快速选择所需的内容

  • 日志记录应该是可配置的

如果您有一个大容量的服务器系统,那么记录所有内容每秒可以为您生成数兆字节的数据。您应该具有如何控制记录的内容和不记录的内容的功能。

例如,您可以查看 Android logging API for C(cutils 组件)。它是函数 + 宏的组合,可让您将日志记录语句添加到代码中。

您选择哪种机制在磁盘上存储日志是您的选择,但最好使用您平台最常用的方法(Linux 为 /var/logs,Android 为 logcat 等)

于 2013-03-16T20:48:51.453 回答