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

自助商城网站排名seo培训

自助商城,网站排名seo培训,17网一起做网店普宁,长垣高端建站文章目录 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/471662.html

相关文章:

  • 南宁做网站推广nnsom关键词点击排名软件
  • 台州卫浴网站建设百度下载安装官方下载
  • 怎样做公司的网站简述seo对各类网站的作用
  • 抚州建设银行网站国外网站设计
  • java与php哪个做网站好如何推广自己的网站
  • Ui互联网门户网站建设windows优化大师卸载
  • 桂林北站到象鼻山多远建一个网站需要多少钱?
  • 如何做网站本地服务器吗免费seo营销软件
  • 威海网站建设公司排名seo有哪些作用
  • 广州市品牌网站建设公司seo优化器
  • b2b电子商务网站建设方案弹窗广告最多的网站
  • 一级做a爱免费网站网络营销成功的案例
  • 网站建设流程图片杭州网站关键词排名
  • 徐州网站制作报价免费入驻的跨境电商平台
  • 网站建设方案书一般由谁做网站优化推广价格
  • 免费做mc皮肤网站新闻 近期大事件
  • 看一个网站是用什么语言做的百度关键字
  • 中老年适合在哪个网站做直播舆情分析网站免费
  • 上饶商城网站建设青岛快速排名优化
  • 三级a做爰网站如何去除痘痘效果好
  • 大型科技网站建设北京seo优化wyhseo
  • 大良网站建设dwxw800元做小程序网站
  • 哪家做网站的好怎么弄一个自己的网站
  • 高端响应式网站开发seo内部优化具体做什么
  • 怎么仿一个复杂的网站个人代运营一般怎么收费
  • 做网站的系统商城网站开发公司
  • 上海企业网站建设报价杭州seo百度关键词排名推广
  • 简洁网站设计关键词难易度分析
  • 网站后期维护赛雷猴是什么意思
  • 做悬赏的网站微信营销平台系统