日志记录功能的配置

标签 c logging global-variables

我编写了一个简单的日志记录函数,它显示时间戳并使用 vprintf() 来模拟 printf()。现在,我的主程序正在将配置文件读入结构配置。我计划让日志记录功能使用此配置来确定它应该记录到哪里(std{out,err}、syslog、其他一些文件,...)。那么,让我的日志记录功能知道它应该记录到哪里的最好方法是什么?我正在考虑让我的 struct configuration * config 成为一个全局变量,在 main() 之前声明并在 extern struct configuration * config 中log.h 以便 log.c 可以使用它。但是每个人都在说“全局变量不好,不要使用它们”,所以我想知道是否有更好的方法。

最佳答案

嗯,全局配置需要是全局的。所以,我认为这是规则的异常(exception)。但是,在大多数情况下,您可能希望将 struct 公开为 const。这将有助于缩小 future 改变全局状态的模块的范围。

要实现这一点,请使用公开const 指针的全局函数而不是直接的extern。事实上,您也可以将配置 struct 声明为 static。这将进一步消除意外访问。

关于日志记录功能的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6508966/

相关文章:

c++ - 不允许从全局函数调用宿主函数

c# - Serilog JsonFormatter 是否支持 Formatting.Indented?

java - 如何在 Glassfish 3 中为每个部署的应用程序配置 log4j?

python - 在递归函数中保持计数

c - 具有自己的文件偏移量的重复文件描述符

c - 将 C 参数内联到数组

android - Kotlin/Android Studio-如何将变量从替代乐趣传递到应用程序的其余部分?

JavaScript - 使用 Webpack 管理全局变量

c - 为什么使用 select() 而不是 sleep()?

java - 为什么文件名为 catalina.out?