当前位置: 首页 > wzjs >正文

广西建设网官网办事大厅桂建云关键词排名优化技巧

广西建设网官网办事大厅桂建云,关键词排名优化技巧,成年男女做羞羞视频网站,excel表格做网站文章目录 3.3.1 spdlog异步日志1. spdlog1. 日志作用2 .同步日志和异步日志区别 2. spdlog是什么下载命令:2. spdlog为什么高效3. spdlog特征5. spdlog输出控制6. 处理流程7. 文件io8.问题 2. 如何创建logger3. 如何创建sink4. 如何自定义格式化5. 如何创建异步日志…

文章目录

  • 3.3.1 spdlog异步日志
    • 1. spdlog
      • 1. 日志作用
      • 2 .同步日志和异步日志区别
    • 2. spdlog是什么
      • 下载命令:
      • 2. spdlog为什么高效
      • 3. spdlog特征
      • 5. spdlog输出控制
      • 6. 处理流程
      • 7. 文件io
      • 8.问题
    • 2. 如何创建logger
    • 3. 如何创建sink
    • 4. 如何自定义格式化
    • 5. 如何创建异步日志
    • 6. 刷新策略

3.3.1 spdlog异步日志

1. spdlog

1. 日志作用

  1. 追踪层序运行状态
  2. 出现问题提供现场运行信息
  3. 分析性能信息瓶颈和潜在系统故障

2 .同步日志和异步日志区别

  • 同步日志:日志函数调用 会直接执行写入操作(比如写到控制台、文件等)写入完成后函数才返回,日志写入和业务线程在同一线程同步执行
  • 异步日志:日志调用将日志消息 推入一个队列实际的写入操作由 后台线程 异步完成,业务线程不会阻塞

2. spdlog是什么

下载命令:


# 项目下载
git clone https://github.com/gabime/spdlog.git
#编译
cd spdlog
mkdir build
cd build
cmake ..
make -j
#安装
sudo make install#或者直接下载
sudo apt-get install libspdlog-dev

2. spdlog为什么高效

  1. 零成本抽象:通过模板和内联函数实现零成本抽象,确保只有在真正需要的时候才进行日志记录, 日志格式化和消息组装大多在编译期就完成
  2. 异步消息记录:可以将 日志消息发送到线程池进行处理,从而减少对主线程性能的影响
  3. 高效格式化:fmt 库进行高效的字符串格式化, 减少了格式化日志消息所需的时间

3. spdlog特征

类别特征描述
🚀 性能超高性能(同步支持百万级,异步千万级日志/秒)
⚙️ 格式化基于 fmtlib,支持 Python 风格的 {}格式化
🌐 多线程支持原生支持多线程安全写入,同步 + 异步两种模式
💾 输出灵活支持多个输出目标(控制台、文件、滚动文件、syslog、自定义 sink)
📦 头文件库完全 头文件-only,无需链接 .lib
.so
🪵 日志级别trace、debug、info、warn、error、critical、off 全部支持
🕓 滚动日志支持支持按 大小 / 日期 滚动日志文件
📚 异常处理默认捕获日志错误(可自定义处理器)
🧵 线程池异步日志使用轻量级线程池 + 无锁队列,提高吞吐量
📖 自定义格式时间戳、线程号、进程号、源文件、函数名、行号……可以全部格式化输出
🔐 线程安全日志器默认线程安全;可以创建非线程安全版本(提高性能)
🔧 易用性接口简洁,易于集成;支持自定义宏、封装自己的日志框架
🧪 单元测试友好可重定向输出到 std::ostream
,便于测试验证输出
📱 兼容性强支持 C++11、C++14、C++17、Windows、Linux、Mac 全平台

5. spdlog输出控制

fmt :格式化输出(C++20)

  1. 多种日志级别:trace,debug,info,warn,error,critial

  2. 多种输出目标:可以将日志输出到控制台、文件或通过网络 发送到远程服务器

  3. 格式化输出:允许用户以结构化的方式 输出日志消息

6. 处理流程

Loggers 负责记录日志消息,Sinks 决定了日志消息的输出位 置,Formatters 负责将日志消息转换为特定格式,Async Logger 异步地将日志消息写入到目标 Sink 中,Registry 用于管 理这些组件

7. 文件io

用户态内核态

8.问题

  1. 多线程使用日志库,跟同步和异步是否有关联
    没有什么关联
  2. 同一个线程处理的,是不是就是同步的
    如果是当前处理程序处理的那就是同步的,如果仅仅是获得完成通知,那就只是协程上的同步
  3. 为什么需要这么多的日志级别
    trace,debug,info,warn,error,critical
    左到右,级别越来越高
级别用途描述
trace最细节的日志,追踪变量、执行路径,性能分析时有用(函数级别打印
debug调试信息,用于开发期观察程序逻辑,如状态变化、调用流程(模块级别状态
info一般运行信息,系统启动、任务完成、资源加载等(用户可以看到
warn非致命问题,程序还能运行,比如配置异常、网络抖动(可忽略但需注意
error程序运行失败了某个功能,比如读取文件失败、通信断开等(需重点关注
critical致命错误,系统可能崩溃或者需要立刻介入,如系统异常终止(报警级别

最低日志级别:高于它的才会显示,低的不显示

部署发布的时候,通常要求日志级别较高

  • 分级控制打印:通过 logger->set_level(...) 控制输出级别,避免生产中输出太多调试信息
  • 提高性能:只记录重要日志,减少 I/O 开销
  • 定位问题快速准确:关键错误更容易定位,细节日志帮助开发回溯问题

2. 如何创建logger

获取实例是线程安全的

  1. 工厂方法创建
auto logger = spdlog::stdout_color_mt("console");
  1. 手动创建
auto sink = make_shared<spdlog::sinks::stdout_color_sink_mt>();
auto logger = make_shared<spdlog::logger>("mylogger", sink);
spdlog::register_logger(logger);
  1. 注册logger,目的为了全局访问
spdlog::get("mylogger")->info("Hello from anywhere!");

3. 如何创建sink

可用的sink

// stdout_color_sink_mt:彩色终端输出(多线程)// basic_file_sink_mt:写入基础文件// rotating_file_sink_mt:日志轮转(按文件大小)// daily_file_sink_mt:每天生成一个日志文件// null_sink_mt:静默输出(调试用途)

自定义的sink

继承 spdlog::sinks::base_sinksink,实现 sink_it_()flush_() 方法即可

4. 如何自定义格式化

  1. set_paattern
spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] %v");
  1. 扩展falgs
  • %v:日志内容
  • %t:线程 ID
  • %s:源文件名
  • %#:源代码行号
  • %!:函数名
  • %^ %$:高亮开头/结尾(用于终端)
  1. 源文件定位flags
SPDLOG_LOGGER_CALL(logger, spdlog::level::info, "msg");

5. 如何创建异步日志

  1. 使用async_factory
#include "spdlog/async.h"
#include "spdlog/sinks/basic_file_sink.h"auto logger = spdlog::basic_logger_mt<spdlog::async_factory>("async_logger", "logs/async.txt");
  1. creat_async,自定义方式
auto sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/async.txt", true);
auto logger = spdlog::create_async("async_logger", sink);
  1. creat_async_nb,非阻塞写法,不阻塞主线程写入日志
auto logger = spdlog::create_async_nb<spdlog::sinks::basic_file_sink_mt>("async_nb_logger", "logs/nb.txt");
  1. async_logger
// 初始化线程池:队列大小8192,线程数1
spdlog::init_thread_pool(8192, 1);auto sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/custom.txt", true);
auto async_logger = std::make_shared<spdlog::async_logger>("custom_async",sink,spdlog::thread_pool(),spdlog::async_overflow_policy::block);spdlog::register_logger(async_logger);
  1. 默认线程池只有一个线程,队列大小8192,
  • 优点:低资源占用,保证 FIFO 顺序。
  • 缺点: 日志处理速度受限于一个线程
  1. 处理队列满:async_overflow_policy:block,overrun_oldest

  2. 多线程线程池,日志输出无法保证有序

6. 刷新策略

  1. 手动flush
logger->flush();
  1. 条件flush
spdlog::flush_on(spdlog::level::err);
  1. 间隔flush
spdlog::flush_every(std::chrono::seconds(3));
http://www.dtcms.com/wzjs/506972.html

相关文章:

  • 有哪些做网站的公司好网站seo基本流程
  • 做网站建设的怎么寻找客户国产免费crm系统有哪些在线
  • 网站自适应布局山东今日头条新闻
  • 广州icp网站测评全网引流推广
  • it设备网站如何做seo设计个人网站
  • 秦皇岛城乡建设局网站如何创建自己的小程序
  • 域名解析要登入哪个网站做seo外链建设的方法有
  • 电子商务公司建设网站方案sem运营是什么意思
  • 网站如何免费做SEO优化北京搜索引擎优化经理
  • 网站建设的公司地址独立站建站平台有哪些
  • 快速做网站用什么软件发布软文平台
  • 做业精灵官方网站快速建站哪个平台好
  • 网站打模块山东网络优化公司排名
  • 实例网站制作教程惊艳的网站设计
  • 邱县做网站手机优化软件排行
  • 平邑做网站百度指数官网登录
  • 建影楼网站多少钱百度推广入口
  • python做网站性能微信销售平台
  • 做网站阳泉快速优化工具
  • 一定火网站建设定制谷歌seo需要做什么的
  • 陕西网站建设培训有道搜索
  • 安阳百姓网seo线下培训课程
  • 石家庄语音网站建设公司网络营销ppt
  • 做商城外贸网站站长工具的使用seo综合查询运营
  • 宝贝做网站seo站长工具推广平台
  • 企业网站开发上海韵茵信息流广告推广
  • 小型电商网站模板网络营销的特征和功能
  • 广州城乡建设网站磁力蜘蛛
  • 网站制作图片插入代码google网站入口
  • 网站设计的内容seo全网营销