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

邵阳公司网站建设免费网站推广优化

邵阳公司网站建设,免费网站推广优化,自己做网站多少钱,戴尔网站建设的目标文章目录 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/76545.html

相关文章:

  • 小学网站建设报告手机百度如何发布广告
  • 七牛云建网站b2c有哪些电商平台
  • 山东东成建设咨询有限公司网站东莞seo收费
  • 网站建设色系搭配苏州seo关键词优化软件
  • 网络培训系统入口在线seo
  • 网站建设适合女生吗谷歌浏览器官网
  • 用哪个网站做相册视频优化的意思
  • 做教师知识网站有哪些sem营销
  • 网站建设市场占有率宁波网站推广运营公司
  • 虎门手机网站建设营销课程培训
  • 郑州微网站开发百度推广图片
  • 政府网站模板 红色风格如何进行seo搜索引擎优化
  • 定制网站哪家好互联网推广中心
  • 爱网站关键词查询百度网盘私人资源链接
  • dw建立网站之后怎么做seo网站推广seo
  • 龙游网站制作产品推广网站
  • b站网站大全如何推广软件
  • 网站怎么做登录qq群排名优化软件官网
  • 花溪村镇建设银行网站域名服务器地址查询
  • 做网站预付款 怎么做账网络整合营销案例
  • 购物型网站建设黄冈seo顾问
  • 丽水做网站的公司云资源软文发布平台
  • 网站改版做301网站建设公司排名
  • 代理ip多少钱一个月seo是干啥的
  • 西安公司网站开发360优化大师官方版
  • 个人网站可以做推广吗百度广告语
  • 网站建设培训西安杭州优化建筑设计
  • 西安个人做网站seo系统源码出售
  • 外包商网站怎么做推广引流app
  • wordpress 评论邮件通知旺道seo优化软件怎么用