简单记录器的问题

troubles with a simple logger

本文关键字:问题 记录器 简单      更新时间:2023-10-16

我正试图用静态方法创建一个简单的日志类,但当我试图记录一些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吗?还是可以这样做?

对于任何解决这个问题的提示,并帮助我得到一个"好"的记录器,我将是伟大的。

问题与日志记录无关。不能使用+连接C字符串。

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

无论如何,如果您使用c++,我会尽可能使用std::string,因为确实支持+进行级联。

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

您使用的是C++,所以使用C++处理字符串的方式:将const char *替换为const std::string &

表达式

"获取值:"+名称+"失败!"

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

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

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