在我看到的软件中,有类似的东西:
string message = "loggging" + getsomedata + "text" + getsomemoredata + ...;
DBLog(LOGLEVEL_HIGH, message);
DBLog获取更多数据,将它们放在一起并将其传递给“loggingservice”
这是一个非常高的loglevel,只能在一些非常(!)罕见的调试场景中设置。在示例系统中,包含此代码的函数平均每秒调用约25次。
我认为它可能会花费一点性能,因为即使日志记录已关闭,也会每次都调用它。去这儿的方法是什么?尝试以某种方式到达当前的loglevel,只在需要时才调用所有这些?只是让它像这样?完全不同的东西?
答案 0 :(得分:1)
理想情况下,您的日志记录代码应确定是否以及何时记录。不幸的是,这需要您将要记录的代码始终构造并调用日志代码。可以选择从我们的日志记录层公开一种方法,以确定是否记录日志消息以确定是否应该构造消息。
即:
if( DBWouldLog(LOGLEVEL_HIGH) )
{
string message = "loggging" + getsomedata + "text" + getsomemoredata + ...;
DBLog(LOGLEVEL_HIGH, message);
}
答案 1 :(得分:0)
答案取决于语言支持。最值得注意的是,我支持宏或内联函数。
如果您使用的语言包含C ++(或代码看起来不像的C)等内置宏,那么您可以将宏定义为(假设C / C ++宏):
#define DBLog(level, message) \
do { \
if (DBWouldLog(level)) { \
DBLog_output(level, message); \
} while (0)
您的DBWouldLog(level)
可能是简单的宏(或类似的内联函数)
#define DBWouldLog(level) (level < DB)
这将消除您似乎担心性能损失的函数调用。
请注意,即使您选择的语言不支持宏,您仍然可以通过首先使用选择的宏系统预处理源文件来轻松支持宏(我已经看到C预处理器用于处理Java代码并亲自使用{{ 1}}在另一个上下文中提供更强大的预处理层)。至少如果您使用的是make文件,则很容易实现所需的附加规则。