背景:在C ++中,为单例日志记录类设置日志级别(DEBUG,WARN,ERR等)的标准方法是通过环境变量。这样,程序员不必通过日志级别。此外,默认情况下,任何子进程都会继承父级的日志级别。缺点是走环境表是O(n),因此您不希望每次记录消息时都检查它。相反,它会在启动时检查一次,而不会再次检查。但是,这被认为是可以接受的,因为预计日志级别不会在流程的生命周期内发生变化。
问题:在符合MISRA标准的C(或一般只是C)中设置日志级别的标准方法是什么?有没有普遍接受的方法,或者每个人都自己决定? 要明确:我问的是一个普遍接受的方法来实现自定义日志库,而不是syslog。我不是要求语言特定的支持,只要有一种标准的方法来实现这一功能。
请求的原因:我是MISRA C的新手,正在使用现有的代码库,其中每个进程都将日志级别作为命令行参数并将其传递给单例记录器主要()。我想知道这种设计是否普遍并被接受,或者只是设计它的人的怪癖。
答案 0 :(得分:2)
它看起来不像语言功能,而是一个运行时环境。
如果您有任何POSIX兼容性图层,那么您可以获得有关syslog(3)
文档及其相关<syslog.h>
的更多详细信息。
这是POSIX,thouhh,所以它比C ++更多。
无论如何,在发射时选择单个记录消息的级别,调用syslog(int priority, const char *format, ...)
,其中第一个参数是优先级,最后是消息级别。
最简单的方法是在程序启动时简单地调用openlog(const char *ident, int option, int facility)
,然后在需要时随时调用syslog()
。然后,您将从系统日志中进行过滤。
作为一个选项,您可以设置&#34; 日志过滤器&#34;,每次发出新日志时都要检查一个int值。如果级别没有资格,您可以跳过调用syslog()
。