从库中公开日志记录界面

时间:2013-03-16 20:39:14

标签: c logging middleware

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

在开发过程中,我发现分析日志的速度更快,更容易,可以跟踪和隔离错误。显然,我希望对库的任何生产使用都不需要频繁检查日志输出。

但实际情况是,一些错误只会出现在生产环境中。造成这种情况的一个常见原因可能是在库的另一侧实现了一个在标准方面做灰色区域的事情。因此,需要能够从生产环境中分析日志。

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

我目前有两个想法:

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

#define方法可行,但可能不灵活。另外,我并不十分关心性能。我首先采用实现的方法,优化第二。

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

1 个答案:

答案 0 :(得分:2)

以下是我的注意事项:

  • 记录始终必须在那里

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

  • 记录消息应根据级别而有所不同

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

  • 记录应该是可配置的

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

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

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