c++ - 停止计算运算符<<

标签 c++ logging

我正在尝试为我自己做一个简单的日志库。我知道曾经存在过几个,但我还没有找到任何适合我的应用程序的仅 header 、小型且非常“C++”的日志库。

目前我有以下语法:

logger << debug << "A debug message" << end; //debug and end is my custom manipulators

我已经实现了所有必要的运算符 << 并且它工作得很好,特别是当它与 std::ostream 向后兼容时。但我想知道,如果不应该记录某些消息(在示例中调试后),为什么要停止评估任何内容,只是为了提高效率?让严重性操纵器“消失”后的所有内容?

现在我有以下简短的代码:

template <typename Type>
Logger & Logger::operator<<(const Type & message)
{
    if(this->get_message_level() <= this->get_severity())
    {
        BOOST_FOREACH(std::ostream* stream, this->_sinks)
        {
            *stream << message;
        }
    }
    return *this;
}

Logger & Logger::operator<< (Logger & (*pf)(Logger&))
{
    return pf(*this);
}

Logger & debug(Logger& logger)
{
    logger.lock();
    logger.set_severity(7);
    //...
    return logger;
}

Logger & end(Logger& logger)
{
    logger << std::endl;
    logger.unlock();
    return logger;
}

提前致谢。

最佳答案

你可以做一些简单的事情

extern "C" bool want_log;
#define LOG(Arg) do { if (want_log) \
   cout << __FILE__ << ":" << __LINE__ ": " << Arg << endl; } while(0)

并将其用作 LOG("x=" << x)

关于c++ - 停止计算运算符<<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8602546/

相关文章:

logging - 为什么Apache HttpClient 4.5记录HTTP流量这么差?如何使其冗长?

c# - NLog 的 MongoDb 目标

c++ - Makefile 中的 "Optional"目标文件目标?

java - 记录器创建太多文件

Python:使用时间戳记录操作和异常

c++ - 覆盖基于模板类型符号的虚拟方法

javascript - winston 在文本中保存颜色格式化程序,如何删除它但仍然显示颜色?

c++ - 在 C++ 中使用 rand() 和 srand()

c++ - 为什么scons下clang不显示颜色输出?

c++ - SSE 双线性插值