用简单的记录器来解决问题

时间:2014-04-19 11:17:40

标签: c++ logging

我正在尝试使用静态方法创建一个简单的日志记录类,但是当我尝试记录一些const char*变量并想知道原因时,我会遇到麻烦。它说Error: expression must have integral or unscoped enum type。我在stackoverflow和谷歌寻找它,但不知何故它不能帮我把它弄好。 记录方法如下:

void Logger::log(const char* message){
#ifdef _DEBUG
    std::cout<< "[INFO]" << message << std::endl;
#endif
}

void Logger::err(const char* message){
#ifdef _DEBUG
    std::cout << "[ERROR]" << message << std::endl;
#endif
}

我想在这里打电话给他们:

char* Config::getConfigValue(const char* name){
    if (m_doc.first_node())
    {
        xml_node<>* node = m_doc.first_node()->first_node(name);
        if (node)
        {
            Logger::log("Getting value: " + name + ": "+ node->value());
            return node->value();
        }
    }
    Logger::log("Getting value: " + name + " FAILED!");
    return 0;
}

我对这种简单的记录器的想法完全错了吗?

我应该在我记录的每一点#ifdef这样做吗?或者我可以这样做吗?

对于解决这个问题的任何提示,并帮助我找到一个“好”的记录器,我会很高兴。

3 个答案:

答案 0 :(得分:3)

问题与您的日志记录无关。您无法使用C连接+字符串。

"Getting value: " + name // Not going to work.

如果您仍然在c++,我会尽可能坚持std::string,因为支持+进行连接。

答案 1 :(得分:1)

char *char const *是指针类型,而不是类或结构,因此不支持使用+运算符进行连接。

您正在使用C ++,因此请使用C ++处理字符串的方式:将const char *替换为const std::string &

答案 2 :(得分:1)

表达式

“获得价值:”+名称+“失败!”

其中name为const char* name是一个错误,因为全局命名空间中没有operator + const char*。您必须使用strcatstrcpy

在C ++中,你应该使用非常灵活的std::string(即动态调整大小):

char* Config::getConfigValue( std::string name){
    //...
    Logger::log("Getting value: " + name + ": "+ node->value());
}