假设我们有几个级别的日志记录:trace,debug,info,error。 我想知道是否有写下面的代码的方式:C++中的懒惰日志记录
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被称为如果级别为越小global_severity_level。事实上,create_message可能会很长,并且不管它创建了什么字符串。如果有很多“调试”日志,那么在非调试模式下运行时,这些日志可能会产生大量开销。
我知道如果函数“log”是一个宏,可以这样做,只有在severity> minimal_severity;时才调用create_message()。但没有另外一种方法可以在没有宏的情况下执行此操作?
编辑
在上面,我没有指定create_message,因为它可以是任何东西,特别是:
log(level, "Created object " + my_object.getName());
在这种情况下,有没有写日志这样的方式没有创建完整的字符串,以相对透明的方式为程序员调用日志?
非常感谢
你可以'create_message()'检查'global_log_level'。 – NPE
您可以将'create_message'函数传递给'log()',所以'log()'只会在级别合适的情况下生成昂贵的消息? – JaredC
你好,我指的是一个未指定的函数create_message(),因为这个消息可能来自任何地方,但它可以在运行时写入,就像log(level,“Object”+ my_object.getName()+“已被创建”)。 ; - 在这种情况下,我无法将任何内容传递给create_message(),它基本上是2个字符串之间的运算符+。我也不能将此函数作为函数传递到日志中... – GHL