c++ - 我不能在循环中使用 spdlog 记录器
问题描述
我想通过循环创建日志。这是一个简单的例子:
#include <iostream>
#include "logging.hpp"
int main(int argc,char* argv[]){
for(int i=1; i<argc; i++)
Logger l(argv[i]);
return 0;
}
这是logging.hpp
文件内容:
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include <iostream>
class Logger{
public:
Logger(std::string msg){
auto console = spdlog::stdout_color_mt("console");
console->info(msg);
}
};
它编译没有问题,但是当我运行带有多个参数的程序时,它会发生错误:
[2020-10-14 20:12:30.067] [console] [info] .<first-argument>
terminate called after throwing an instance of 'spdlog::spdlog_ex'
what(): logger with name 'console' already exists
Aborted (core dumped)
解决方案
非常快速和肮脏的解决方法是:
static auto console = spdlog::stdout_color_mt("console");
这将确保只有一个实例,因为初始化程序只执行一次。
推荐阅读
- java - 如果在配置文件中,则仅执行 Maven 插件
- javascript - 421 4.3.0 临时系统问题。稍后再试 (10)
- google-compute-engine - 如何在 GoogleCloud 中按“描述”显示/列出快照主机?
- mysql - 从一个表mysql导出SUM值
- php - Symfony 服务容器 - 使用带有参数的工厂作为参数
- git - 即使在 git fetch 之后,在 bitbucket 中创建的分支也不会显示在我的本地 git 中
- firebase - 在 Vue 中,如何链接到包含用户特定数据的组件?
- git - git subtree add 后 Git push to main project repo 抛出错误
- perl - 珀尔;在多个文件中查找并替换为特殊条件字符串
- go - Serf 客户端无法连接到本地运行的 RPC 客户端