假设我们有几个日志级别:trace、debug、info、error。我想知道是否有一种方法可以编写以下代码:
如果级别小于全局严重性级别,则不会调用create_message。确实,create_message可能会很长,并且无论如何它都会创建一个字符串。如果有很多“debug”日志,在非调试模式下运行时,这些日志可能会成为相当大的开销。
我知道如果函数“log”是宏,则可以这样做,仅在severity > minimal_severity时调用create_message(); 但是没有宏还有没有其他方法可以做到这一点?
编辑:
在上述内容中,我没有指定create_message,因为它可以是任何东西,特别是:
在这种情况下,有没有一种方法可以以相对透明的方式为调用日志的程序员编写日志,而不创建完整的字符串?
感谢您的阅读。
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());
如果级别小于全局严重性级别,则不会调用create_message。确实,create_message可能会很长,并且无论如何它都会创建一个字符串。如果有很多“debug”日志,在非调试模式下运行时,这些日志可能会成为相当大的开销。
我知道如果函数“log”是宏,则可以这样做,仅在severity > minimal_severity时调用create_message(); 但是没有宏还有没有其他方法可以做到这一点?
编辑:
在上述内容中,我没有指定create_message,因为它可以是任何东西,特别是:
log(level, "Created object " + my_object.getName());
在这种情况下,有没有一种方法可以以相对透明的方式为调用日志的程序员编写日志,而不创建完整的字符串?
感谢您的阅读。
create_message()
检查global_log_level
。 - NPEcreate_message
的函数传递给log()
,这样当级别适当时,log()
只会构建昂贵的消息? - JaredC