spdlog
spdlog 支持多spdlog::logger, 适用与多个隔离模块的日志分别保存
而且logger含有多个sink的vector。sink与文件对应,如果想把日志输出到多个文件,就创建多个sink
1
| std::vector<sink_ptr> sinks_;
|
logger和sink的级别独立
1 2 3 4 5 6 7 8
| // logger级别的判断 template<typename... Args> inline void spdlog::logger::log(source_loc source, level::level_enum lvl, const char *fmt, const Args &... args) { if (!should_log(lvl)) { return; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| // sink级别的判断 inline void spdlog::logger::sink_it_(details::log_msg &msg) { #if defined(SPDLOG_ENABLE_MESSAGE_COUNTER) incr_msg_counter_(msg); #endif for (auto &sink : sinks_) { if (sink->should_log(msg.level)) { sink->log(msg); } }
|
所以可以支持不同的级别到不同的文件,例如logger设置为trace级别, sink1 设置为info级别, sink2设置为trace级别,这样就能创建两个日志文件
1 2
| info.log # 只保存info级别 full.log # 保存所有级别(logger级别或者sink2的级别)
|