新手看spdlog源码做笔记以及附上简单使用手册

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)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值