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

怎么样自己做网站赚钱年入40万网站开发的数据库技术

怎么样自己做网站赚钱年入40万,网站开发的数据库技术,抓取网站访客数据原理,域名大全免费看1. 忘掉std::cout吧 我们在学习C时&#xff0c;经常使用std::cout来输出信息&#xff0c;如&#xff1a; std::cout << "Hello World!" << std::endl;这种方式在学习或演示时非常方便&#xff0c;但实际开发中&#xff0c;我们通常会使用一些日志库&am…

1. 忘掉std::cout吧

我们在学习C++时,经常使用std::cout来输出信息,如:

std::cout << "Hello World!" << std::endl;

这种方式在学习或演示时非常方便,但实际开发中,我们通常会使用一些日志库,如:spdlog等。
以下是两者的简单对比:

特性std::coutspdlog
基本定位C++标准库的输出流现代C++日志库
主要用途简单的控制台输出全功能日志记录
性能较慢,特别是默认与C stdio同步时高性能,异步日志支持,优化的格式化
线程安全基本线程安全,但输出可能交错完全线程安全,支持异步日志记录
日志级别无内置日志级别支持多种日志级别(trace, debug, info, warn, error, critical)
格式化使用流操作符和操纵符,格式控制复杂支持Python风格的格式化和fmt库集成,简洁直观
输出目标主要是控制台多种输出目标(控制台、文件、系统日志、网络等)
文件操作需要额外使用std::ofstream内置文件日志支持,自动文件轮换
错误处理通过流状态标志,不直观异常处理和错误回调
内存使用较轻量,但格式化可能导致临时对象创建可配置的内存使用,支持内存池优化
编译依赖C++标准库的一部分,无额外依赖第三方库,需要额外引入
配置灵活性有限,主要通过流操作符高度可配置(日志模式、格式、轮换策略等)
日志轮换不支持支持基于大小和时间的日志轮换
彩色输出不直接支持,需要平台特定代码内置彩色控制台输出支持
模式匹配过滤不支持支持基于模式的日志过滤
国际化支持通过std::locale支持基本Unicode支持
适用场景简单程序、教学示例、快速调试生产环境、复杂应用、需要高级日志功能的系统
代码示例std::cout << "Hello " << name << std::endl;spdlog::info("Hello {}", name);
初始化复杂度低,直接可用中等,需要创建和配置日志器
自定义类型支持通过重载<<运算符通过fmt库的格式化特性

补充说明

何时选择 std::cout

  • 简单的程序或脚本
  • 教学示例和快速原型
  • 不需要复杂日志功能的小型应用
  • 希望减少外部依赖的项目

何时选择 spdlog

  • 生产环境应用
  • 需要高性能日志记录的系统
  • 多线程应用
  • 需要日志轮换和多目标输出的项目
  • 对日志格式和级别有严格要求的场景

性能优化提示

  • 对于 std::cout,可以使用 std::ios::sync_with_stdio(false) 提高性能
  • 对于 spdlog,可以配置异步日志和自定义线程池以获得最佳性能

我个人建议,无论是简单的程序还是复杂的应用,都使用spdlog,因为spdlog功能强大,配置灵活,而且性能高。

1.1. spdlogfmt

通常 spdlogfmt结合使用,fmt是一个现代的C++格式化库,它提供了类似于Python的格式化语法,可以简化日志格式化。

1.1.1. 安装

# 通过vcpkg安装
vcpkg install spdlog fmt

1.1.2. fmt代码示例

#include <fmt/core.h>
#include <fmt/format.h>
int main() {int year = 2025;std::string name = "Vulkan";// 基本格式化输出fmt::print("Hello, {}!\n", name);// 格式化数字fmt::print("The year is {}.\n", year);// 格式化到字符串std::string message = fmt::format("Welcome to {} cookbook, year {}.", name, year);fmt::print("{}\n", message);return 0;
}

1.1.3. spdlog 代码示例

简单使用

#include <spdlog/spdlog.h>
int main(){spdlog::info("Hello, {}!", "World");
}

按天生成日志文件

#include <spdlog/spdlog.h>
#include <spdlog/sinks/daily_file_sink.h>void daily()
{fs::create_directories("logs");auto logger = spdlog::daily_logger_mt("daily_logger", "logs/daily.txt", 0, 0);logger->info("Hello, {}!", "Vulkan");spdlog::set_default_logger(logger);spdlog::info("The year is {}", 2025);
}

将日志输出到控制台和文件

#include <spdlog/spdlog.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/sinks/daily_file_sink.h>void multi_sink()
{// 创建控制台 sinkauto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();// 创建文件 sinkauto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log.txt", true);// 创建多 sink loggerstd::vector<spdlog::sink_ptr> sinks{console_sink, file_sink};auto logger = std::make_shared<spdlog::logger>("multi_sink", sinks.begin(), sinks.end());spdlog::set_default_logger(logger);spdlog::info("Hello, {}!", "Vulkan");spdlog::warn("This is a warning!");spdlog::error("This is an error!");spdlog::info("The year is {}", 2025);spdlog::shutdown();
}

1.1.4. CMakeLists.txt

以下是一个示例配置:
我们采用find_package(fmt CONFIG REQUIRED)来进行配置

cmake_minimum_required(VERSION 3.10)# 设置项目名称和语言
project(VulkanChecker LANGUAGES CXX)# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(fmt CONFIG REQUIRED)
find_package(spdlog CONFIG REQUIRED)# 添加可执行文件
add_executable(main main.cpp)target_link_libraries(main PRIVATE fmt::fmt)
target_link_libraries(main PRIVATE spdlog::spdlog)# 如果是Windows系统,设置可执行文件的输出目录
if(WIN32)set_target_properties(mainPROPERTIESRUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
endif()

1.1.5. windows 下编译配置 与 运行

# 生成构建目录并配置CMake工程
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=C:/Users/Admin/workspace/vcpkg/scripts/buildsystems/vcpkg.cmake# 编译工程,若成功则运行生成的可执行文件
cmake --build build ; if ($?) { .\build\bin\Debug\main.exe | Tee-Object -FilePath output.txt}

以下是一个输出结果示例:

[2025-05-20 06:26:16.578] [daily_logger] [info] Hello, Vulkan!
[2025-05-20 06:26:16.578] [daily_logger] [info] The year is 2025

由此可以看出,spdlog 会自动按天生成日志文件,且日志文件中包含时间戳、日志等级、日志内容。


文章转载自:

http://xvdzep0T.jfcbz.cn
http://xhbfG2UC.jfcbz.cn
http://ScWRk1HR.jfcbz.cn
http://GSBYE0L4.jfcbz.cn
http://f51xvmh5.jfcbz.cn
http://Coj7LKoc.jfcbz.cn
http://olcolx5d.jfcbz.cn
http://9czolGjV.jfcbz.cn
http://MYt44xWO.jfcbz.cn
http://DvI9bSWi.jfcbz.cn
http://nzsFDeKM.jfcbz.cn
http://aFQAQdr3.jfcbz.cn
http://YzcWB3Yi.jfcbz.cn
http://70wKUqFJ.jfcbz.cn
http://mwHFBwgh.jfcbz.cn
http://hTzjXxxr.jfcbz.cn
http://J6OktigK.jfcbz.cn
http://T2UThNjy.jfcbz.cn
http://vKKnm4b9.jfcbz.cn
http://t726Lmr5.jfcbz.cn
http://hU1Gk5oY.jfcbz.cn
http://8X9kbu8J.jfcbz.cn
http://CPl8TTXy.jfcbz.cn
http://3vVzxBiw.jfcbz.cn
http://jhzsyhgp.jfcbz.cn
http://RTTiw6LA.jfcbz.cn
http://ZNQi9PIV.jfcbz.cn
http://o9EVIggn.jfcbz.cn
http://BbiA1eoB.jfcbz.cn
http://RZ7r7xs2.jfcbz.cn
http://www.dtcms.com/wzjs/648825.html

相关文章:

  • 北京做建筑信息的网站四川省住房和城乡建设厅考试报名
  • 动漫谷网站建设策划书wordpress登录界面插件
  • 我怎么做个人网站中国建筑集团有限公司排名
  • 江门专业网站制作公司wordpress同步至订阅号
  • 网站空间 流量广告设计怎么做
  • 企业网站的开发与应用wordpress 指定模板
  • 开通网站软件的会计科目怎么做江苏首天建设集团网站
  • 网站建设公司扬州互联网营销师报名
  • 网站设计规划的目的和要求营销外贸网站建设
  • 自己人网站建设怎么下载浏览器上的视频
  • 塑胶加工东莞网站建设技术支持天津做网站外包公司有哪些
  • 濮阳建设企业网站公司国企网站开发
  • 子目录做网站图片制作的软件有哪些
  • 建设网站为什么要虚拟主机wordpress页面模板路径
  • 美妆网站怎么做深圳做网站哪个平台好
  • 介绍几个网站上海市干部公示
  • 网站制作方案策划简历dj音乐网站建设开发
  • 摄影网站公司聚通装潢上海各门店地址电话
  • 酒店预订网站开发有哪些网站用mysql
  • 网站制作实验报告阿里云部署一个自己做的网站吗
  • 工会网站群建设设计参考图哪个网站好
  • wordpress网站布置广州网站优化快速提升网站排名
  • 在线购物网站建设流程个体户广告公司名字
  • 万网网站首页株洲在线论坛
  • 如何说服客户做网站网站开发手机模拟器
  • seo查询网站自己建站流程
  • 搞个竞拍网站怎么做网站建设得缺点
  • 求网页设计与网站建设方正隶变简体可以做网站用么
  • 科讯cms网站管理系统kesioncms注册送38元的游戏网站
  • 哪个专业是学网站开发的关于旅游网站建设的方案