c - 在开发模式为 DEBUG 或 RELEASE 后打开/关闭日志记录(例如 zlog)

标签 c logging release-management

我正在用 ANSI C 编写一个小型项目。我还计划使用日志系统,例如 zlog 。但是,我不希望项目在发布时依赖于 zlog,只在开发时需要它。当我在 DEBUG 和 RELEASE 模式之间切换时,打开/关闭这些日志记录语句的正确方法是什么?

例如,我有一个指定的配置文件

mode = DEBUG | RELEASE

当 mode = RELEASE 时,我希望项目源文件中包含所有这些指令,例如

#include "zlog.h"

zlog_init("init_file") 

等等。消失,因此该项目不需要与 zlog 链接。

当然,可以使用宏来包围每个 zlog 用法来实现这一点,但这看起来很尴尬,我想有更优雅的方法来打开/关闭这些日志指令?

最佳答案

我建议添加一个源文件,该文件定义您引用的所有 zlog 接口(interface)并由宏保护,指定它是处于 DEBUG 还是 RELEASE 模式。

例如:

#ifdef NDEBUG
/* It's RELEASE mode */
int zlog_init(const char *confpath) { return 0; }
int zlog_reload(const char *confpath) { return 0; }
void zlog_fini(void) {}
/* ... */
#endif

当调试时,文件只是空的(由于未定义的NDEBUG宏),并且zlog_*()链接到真正的zlog库; RELEASing 时,不要链接到真实的 zlog,而是链接到此虚拟源文件中定义的无操作函数。

关于c - 在开发模式为 DEBUG 或 RELEASE 后打开/关闭日志记录(例如 zlog),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30034203/

相关文章:

ruby-on-rails - 部署为 .war 文件时如何处理 Rails 中的上传和日志?

build-process - 应用程式建立/部署工作流程

sql-server - 将 SQL Server 数据库从测试部署到上线

c - 声明一个静态函数但在 C 中没有 'static' 关键字实现它?

c - 在 Linux 中使用 setuid 位

java - 如何以编程方式将 AccessLogValve 添加到 Tomcat?

svn - Subversion 中发布和项目的良好存储库布局是什么?

c++ - 为什么 gcc 和 NVCC (g++) 看到两种不同的结构大小?

c - 读者-作家问题作家偏好(读者可能会挨饿)

logging - 是否有错误消息的行业标准?