2017-08-10 157 views
0

我在我的应用程序中创建C++库模块。要做日志记录,我使用spdlog。但在生产环境中,我不希望我的lib模块执行任何日志记录。实现开/关的方法之一将是垃圾我的代码使用#ifdef来条件语句像...如何在代码中启用/禁用spdlog日志记录?

#ifdef logging 
    // call the logger here. 
#endif 

我正在寻找一种方式,以避免写这些条件语句。可能是一个包装函数,执行#ifdef检查并写入它。但是,这种方法的问题是,我必须写为每个测井方法包装(如信息,例如,跟踪,警告,错误,...)

有没有更好的办法?

+1

退房https://github.com/gabime/spdlog/wiki/1.-QuickStart#debugtrace-macros –

回答

1

我不知道spdlog。

但是,您可以在您使用常见的一种定义一个宏包含文件,以取代没什么logcall,或为空内联函数,编译器优化器将消除通话。

在 “app.h”

#ifndef LOG 

#ifdef logging 
#define LOG spdlog 
#endif 

#ifndef logging 
#define LOG noop 
#endif 

#endif 

你明白我的意思?

这让大部分代码不变

+0

是,THX的。正如我检查,它适用于普通的功能。但是,如果spdlog是一个具有trace(),info()等成员fns的类,它不会编译。 –

+0

我认为这种方法也应该适用于课堂。请记录你目前的代码是怎样的。也许我或其他人以其他方式提供给你 –