假设我们有几个级别的日志记录:跟踪、调试、信息、错误。我想知道是否有办法编写以下代码:
enum log_level = {trace, debug, info, error};
log_level global_log_level = info;
void log(log_level level, string& message){
if (level >= global_log_level){
std::cout << message << std::endl;
}
}
string create_message(){
...
}
log_level level = debug;
log (level, create_message());
如果 level 小于 global_severity_level,则不调用 create_message。实际上, create_message 可以很长,而且不管它创建什么字符串。如果有很多“调试”日志,那么在非调试模式下运行时,这些日志可能会成为很大的开销。
我知道如果函数“log”是一个宏,则可以这样做,只有在 severity > minimum_severity 时才调用 create_message();但是没有宏就没有另一种方法吗?
编辑
在上面,我没有指定 create_message,因为它可以是任何东西,特别是:
log(level, "Created object " + my_object.getName());
在这种情况下,有没有办法以相对透明的方式编写日志而不创建完整的字符串,以便程序员调用日志?
非常感谢