spdlog 输出函数和行号
时间: 2024-05-29 07:08:47 浏览: 245
可以使用宏定义来获得当前函数和行号,例如在 C++ 中可以使用如下代码:
#define LOG_MSG(logger, msg) logger->info("[{}:{}]: {}", __FUNCTION__, __LINE__, msg)
这样就可以在日志中输出当前函数和行号了。spdlog 和其它日志库的使用方法类似,可以根据具体需要进行设置和使用。
相关问题
spdlog设置 输出函数和行号
可以使用 spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%^%L%$] [%n] %v at %s:%#"); 来设置日志输出格式,并且可以使用 spdlog::set_logger_raw_ptr(logger.get()); 来设置输出到控制台或文件的函数。
请使用spdlog设计一个可以选择在控制台或者文件中打印信息,打印的信息要具体到某个方法中的某一行,各种类型的信息要用颜色区分,日志要有轮换机制,并且封装成一个类,在项目启动时,初始化
好的,我知道了。针对您的需求,我可以使用spdlog库来实现日志的打印。以下是一个简单的示例:
```c++
#include <spdlog/spdlog.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>
class Logger {
public:
Logger() {
// 创建控制台输出 sink
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
// 创建文件输出 sink
auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log.txt", true);
// 创建 logger
logger_ = std::make_shared<spdlog::logger>("my_logger", spdlog::sinks_init_list{console_sink, file_sink});
// 设置日志级别
logger_->set_level(spdlog::level::trace);
}
void log(const char* file, int line, spdlog::level::level_enum level, const std::string& msg) {
// 根据日志级别选择不同的颜色
switch (level) {
case spdlog::level::trace:
logger_->trace("{}:{} - {}", file, line, msg);
break;
case spdlog::level::debug:
logger_->debug("{}:{} - {}", file, line, msg);
break;
case spdlog::level::info:
logger_->info("{}:{} - {}", file, line, msg);
break;
case spdlog::level::warn:
logger_->warn("{}:{} - {}", file, line, msg);
break;
case spdlog::level::err:
logger_->error("{}:{} - {}", file, line, msg);
break;
case spdlog::level::critical:
logger_->critical("{}:{} - {}", file, line, msg);
break;
default:
break;
}
}
private:
std::shared_ptr<spdlog::logger> logger_;
};
int main() {
// 初始化 logger
Logger logger;
// 打印日志
logger.log(__FILE__, __LINE__, spdlog::level::info, "Hello, world!");
return 0;
}
```
在上述示例中,我定义了一个 `Logger` 类,用于封装 spdlog 的使用。在类的构造函数中,我创建了两个 sink:一个是控制台输出 sink,一个是文件输出 sink。然后,我使用这两个 sink 创建了一个 logger 对象。在日志输出方法 `log` 中,我根据不同的日志级别选择不同的颜色,并输出具体的文件名、行号和日志信息。最后,在程序启动时,我使用 `Logger` 类初始化 logger 对象,即可开始打印日志了。
需要注意的是,上述示例中的日志文件不会进行轮换。如果需要实现日志轮换功能,可以使用 spdlog 提供的其他 sink,例如 `rotating_file_sink`,或者自定义 sink。
阅读全文