version 1.7.0
tweakme.h
- SPDLOG_CLOCK_COARSE
如果Linux开启 相比常规时钟获得更快的速度但是精确度会稍微降低 - SPDLOG_NO_THREAD_ID
如果开启 每次的log call调用获取thread id会返回0 - SPDLOG_NO_TLS
如果开启 可以避免spdlog使用线程本地空间 如果你的程序是多线程的可以防止未
定义thread ids - SPDLOG_NO_ATOMIC_LEVELS
如果开启 如同字面意思不使用原子性的的log level设置
当且仅当(Use only if)你确定不会通过不同的线程同时改变一个logger的log level时可以开启 - SPDLOG_WCHAR_FILENAMES
如果开启 可以使用wchar字符的文件名WIN下开启才有效
- SPDLOG_EOL
如果开启 自定义EOL - SPDLOG_FMT_EXTERNAL
如果开启 使用外部三方库的FMT - SPDLOG_WCHAR_TO_UTF8_SUPPORT
如果开启 字面意思WIN下开启才有效
- SPDLOG_PREVENT_CHILD_FD
- 如果开启 防止子进程继承文件描述符
- SPDLOG_LEVEL_NAMES
如果开启 自定义level name - SPDLOG_SHORT_LEVEL_NAMES
如果开启 自定义level name的缩写 - SPDLOG_DISABLE_DEFAULT_LOGGER
如果开启 会关闭默认的LOGGER - SPDLOG_ACTIVE_LEVEL
如果开启 自定义编译时level默认为info - SPDLOG_FUNCTION
如果开启 自定义函数名字宏 比如__PRETTY_FUNCTION__
__FUNCTION__
关于level_t
正常默认使用std::atomic<int>作为level_t的类型
如果有定义上述的SPDLOG_NO_ATOMIC_LEVELS非原子级的Level宏定义
那么level_t会使用 一个自定义的 null_atomic_int 类 这个类提供类似atomic的store和load和exchange操作
发现在exchange里面用到了swap
这里学到一个小技巧 在允许的情况系 交换两个变量的值 swap 会使用std::move效率更高
关于detail/registry.h
单例负责logger的注册管理以及全局的logger设置
比如有默认的flush_level err_handler_ log_level等等
关于logger
class source_loc
filename 文件名
funcname 函数名
line 行号
class log_msg
logger_name
level
time 默认当前时间
thread_id 与上述的SPDLOG_NO_THREAD_ID定义有关
source 默认构造为空
payload 有效荷载msg
关于pattern_formatter
这个主要是控制个格式相关
关于sinks(接收器)
这个主要是控制输出的 我在Debian10 x64的虚拟机下默认是ansicolor_stdout_sink_mt
注意输出有一个输出等级flush_level_在logger中有一个控制是当前日志的等级比这个高才会在log时立刻执行flush
但是ansicolor_stdout_sink_mt在sink_it_时有立刻flush
但是ostream_sink是没有flush那就会由logger的flush_level_控制是否立刻flush
basic_file_sink是文件输出的sink_it_只有write没有flush
一些小结注意事项和设置等如下其实官方的例子比这里好
int test_log()
{
// 默认的
spdlog::info("infomsg");
spdlog::error(fmt::format("error: today is {} {} day ! {}", "a", "bad", 666));
spdlog::critical("criticalmsg: today is {} {} day ! {}", "a", "nice", 777);
// 不会输出 等级不够
spdlog::debug("debugmsg1");
// 设置level
spdlog::set_level(spdlog::level::debug);
spdlog::debug("debugmsg2");
spdlog::set_level(spdlog::level::info);
// 创建osstream
spdlog::create<spdlog::sinks::ostream_sink_mt>("osstream.txt", std::cout, true)