简单记录器的问题
troubles with a simple logger
我正试图用静态方法创建一个简单的日志类,但当我试图记录一些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*
的运算符+。您必须使用strcat
、strcpy
等
在C++中,您应该使用非常灵活的std::string
(即动态调整大小):
char* Config::getConfigValue( std::string name){
//...
Logger::log("Getting value: " + name + ": "+ node->value());
}
相关文章:
- 创建 Spdlog 异步文件记录器时遇到困难
- 如何将自定义记录器与websocketpp一起使用?
- 在C++中隐藏键盘记录器的控制台窗口
- 为什么Qt Creator的应用程序输出不能从spdlog记录器打印
- 麻烦得到提升::记录器编译
- 我正在尝试用 c++ 制作一个日志记录框架,但信息没有传递给记录器的子组件,我做错了什么?
- 多态记录器(虚拟模板化函数?
- 设置提升记录器的线程名称
- Boost Log的琐碎记录器"lazy evaluation"是如何工作的?
- boost::log 设置"Channel"通道记录器中的属性
- 区分键盘记录器中的密码和其他类型的键盘输入
- 记录器的流界面,C
- 如何监控Android和iOS上的所有击键操作,如Windows键盘记录器
- 如何声明和定义 Poco 记录器
- 记录器何时应刷新
- 带有 gtest 框架的 spdlog 记录器不起作用
- 使用常量字符*时如何使用带有模板的记录器
- 提升记录器链接问题
- C++我的文件记录器类有什么问题?
- 简单记录器的问题