C++使用spdlog输出日志文件

参考博客:

日志记录库 spdlog 基础使用_spdlog 写日志-CSDN博客 

GitHub - gabime/spdlog: Fast C++ logging library.

首先在github上下载spdlog源码,不想编译成库的话,可以直接使用源码,将include文件夹下的spdlog文件夹,拷贝至代码所在路径,然后配置包含目录为代码所在目录

其他注意事项:

flag meaning	example
%v	日志内容	“my log test content”
%t	线程ID	“123”
%P	进程ID	“234”
%n	记录器Logger名	“basicLogger”
%l	日志级别	“debug”, “info”, etc
%L	日志级别简称	“D”, “I”, etc
%a	星期几(简称)	“Thu”
%A	星期几	“Thursday”
%b	月份简称	“Aug”
%B	月份	“August”
%c	日期时间	“Thu Aug 23 15:35:46 2014”
%C	年(两位)	“14”
%Y	年	“2014”
%D %x	日期简写	“08/23/14”
%m	月份(数字)	“11”
%d	日(数组)	“29”
%H	小时(24制)	“23”
%I	小时(12制)	“11”
%M	分钟	“59”
%S	秒	“58”
%e	毫秒	“678”
%f	微秒	“056789”
%F	纳秒	“256789123”
%p	AM/PM	“AM”
%r	时间(12制)	“02:55:02 pm”
%R	时分(24制)	“23:55”
%T %X	时间(24制)	“23:55:59”
%z	时区(偏移)	“+02:00”
%E	epoch(秒)	“1528834770”
%%	百分号	“%”
%+	默认格式	“[2014-10-31 23:46:59.678] [mylogger] [info] Some message”
%^	start color range (can be used only once)	“[mylogger] [info(green)] Some message”
%$	end color range (for example %^[+++]%$ %v) (can be used only once)	[+++] Some message
%@	文件名与行数	my_file.cpp:123
%s	文件名	my_file.cpp
%g	文件名(含路径)	/some/dir/my_file.cpp
%#	行数	123
%!	函数名	my_func
%o	相对上一条记录的时间间隔(毫秒)	456
%i	相对上一条记录的时间间隔(微秒)	456
%u	相对上一条记录的时间间隔(纳秒)	11456
%O	相对上一条记录的时间间隔(秒)	4
#include <spdlog/spdlog.h>
#include <spdlog/sinks/rotating_file_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>void init_logging()
{spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%t] [%l] %v");//大于等于该等级的将被输出//spdlog::set_level(spdlog::level::info);spdlog::info("Hello, spdlog!");spdlog::trace("trace信息");spdlog::debug("debug信息");spdlog::info("info信息");spdlog::warn("warn信息");spdlog::error("error信息");spdlog::critical("critical信息");
}void testSpdLog() {// 文件日志定义,设定日志最大100M,且最多保留10个auto fileLogger = spdlog::rotating_logger_mt("fileLogger", "log.log", 1024 * 1024 * 100, 10);//大于等于该等级的将被输出fileLogger->set_level(spdlog::level::trace);//定义输出格式spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l]  [%s->%!->%#]  [%v]");  //log类型 文件->函数名->行数   输出内容spdlog::set_default_logger(fileLogger);for (int i = 0; i < 2; ++i) {SPDLOG_LOGGER_TRACE(fileLogger, "trace输出:{}-{}", i, "测试trace");SPDLOG_LOGGER_DEBUG(fileLogger, "debug输出:{}-{}", i, "测试debug");SPDLOG_LOGGER_INFO(fileLogger, "info输出:{}-{}", i, "测试info");SPDLOG_LOGGER_WARN(fileLogger, "warn输出:{}-{}", i, "测试warn");SPDLOG_LOGGER_ERROR(fileLogger, "Some error message");SPDLOG_LOGGER_CRITICAL(fileLogger, "Some critical message");}
}void testMultiLog() {//文件sinkauto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_st>("logs.log", 1024 * 1024 * 100, 10);file_sink->set_level(spdlog::level::debug);file_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l]  [%s->%!->%#]  [%v]");//控制台sinkauto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_st>();console_sink->set_level(spdlog::level::debug);console_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l]  [%s->%!->%#]  [%v]");std::vector<spdlog::sink_ptr> sinks;sinks.push_back(console_sink);sinks.push_back(file_sink);auto multiLogger = std::make_shared<spdlog::logger>("multiSink", begin(sinks), end(sinks));multiLogger->set_level(spdlog::level::debug);spdlog::set_default_logger(multiLogger);for (int i = 0; i < 2; ++i) {SPDLOG_LOGGER_TRACE(multiLogger, "trace输出:{}-{}", i, "测试trace");SPDLOG_LOGGER_DEBUG(multiLogger, "debug输出:{}-{}", i, "测试debug");SPDLOG_LOGGER_INFO(multiLogger, "info输出:{}-{}", i, "测试info");SPDLOG_LOGGER_WARN(multiLogger, "warn输出:{}-{}", i, "测试warn");SPDLOG_LOGGER_ERROR(multiLogger, "Some error message");SPDLOG_LOGGER_CRITICAL(multiLogger, "Some critical message");}
}int main()
{//init_logging();//testSpdLog();testMultiLog();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/854657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

示例:WPF中TreeView自定义TreeNode泛型绑定对象

一、目的&#xff1a;在开发中经常需要绑定TreeView&#xff0c;所以定义了一个泛型的TreeNode<T>用来方便绑定对象和复用 二、实现 public partial class TreeNodeBase<T> : SelectBindable<T>, ITreeNode{public TreeNodeBase(T t) : base(t){}private Obs…

MySQL常见的命令

MySQL常见的命令 查看数据库&#xff08;注意添加分号&#xff09; show databases;进入到某个库 use 库; 例如&#xff1a;进入test use test;显示表格 show tables;直接展示某个库里面的表 show tables from 库&#xff1b; 例如&#xff1a;展示mysql中的表格 show tabl…

前端三大件速成 05 javascript(2)字符串对象、数组对象、函数对象、BOM对象、DOM对象

文章目录 一、字符串对象1、创建字符串对象的两种方式2、字符串属性3、字符串的方法&#xff08;1&#xff09;编排方法&#xff08;2&#xff09;查询字符串索引&#xff08;3&#xff09;字符串切片&#xff08;4&#xff09;大小写转换&#xff08;5&#xff09;获取指定字符…

Python网络数据抓取(9):XPath

引言 XPath 是一种用于从 XML 文档中选取特定节点的查询语言。如果你对 XML 文档不太熟悉&#xff0c;XPath 可以帮你完成网页抓取的所有工作。 实战 XML&#xff0c;即扩展标记语言&#xff0c;它与 HTML&#xff0c;也就是我们熟知的超文本标记语言&#xff0c;有相似之处&am…

pyqt 鼠绘椭圆 椭圆标注

目录 pyqt 椭圆标注 四个方向可以调整,调整时,另一端固定,只调整当前端,椭圆参数保存加载json pyqt 画椭圆中心点固定,调整是,两端一起调整。 pyqt 椭圆标注 四个方向可以调整,调整时,另一端固定,只调整当前端,椭圆参数保存加载json import sys import json from …

ClickHouse快速安装教程(MacOS)

文章目录 ClickHouse快速安装教程&#xff08;MacOS&#xff09;1.ClickHouse2.快速安装3.快速启动3.1.启动服务器3.2.启动客户端 4.使用案例1.配置文件2.启动CK服务3.创建数据库4.创建表5.插入数据6.查询数据 ClickHouse快速安装教程&#xff08;MacOS&#xff09; 1.ClickHo…

【UEditorPlus】后端配置项没有正常加载,上传插件不能正常使用

接上文【UEditorPlus】后端配置项没有正常加载&#xff0c;上传插件不能正常使用_ueditor ruoyi vue后端配置项没有正常加载,上传插件不能正常使用!-CSDN博客 成功解决图片、视频上传问题后&#xff0c;当服务部署在公网时&#xff0c;会存在大文件无法正常上传的问题。 出现…

电感的本质是什么

什么是电感&#xff1f; 电感器件一般是指螺线圈&#xff0c;由导线圈一圈靠一圈地绕在绝缘管上&#xff0c;绝缘管可以是空心的&#xff0c;也可以包含铁芯或磁粉芯。 为什么把’线’绕成’圈’就是电感&#xff1f; 电感的工作原理非常抽象&#xff0c;为了解释什么是电感…

04通讯录管理系统——退出功能实现

功能描述&#xff1a;退出通讯录 思路&#xff1a;根据用户不同的选项&#xff0c;进入不同的功能&#xff0c;可以选择switch分支结构&#xff0c;将整个架构进行搭建 当用户选择0时&#xff0c;执行退出&#xff0c;选择其他时先不做操作&#xff0c;也不退出程序 代码&am…

2024年6月10日~2024年6月16日周报

文章目录 一、前段时间工作二、完成情况2.1 可变形卷积的学习2.1.1 Introduction-介绍2.1.2 Related Work-相关工作2.1.3 Method-方法2.1.3.1 可变形卷积动态属性的重认识2.1.3.2 Speeding up DCN—加速DCN 2.2 部署可变形卷积 三、假期计划 一、前段时间工作 在之前一段时间主…

------构造类型数据—结构体---- + ----函数-----

构造类型数据——结构体 1&#xff09;结构体的基本概念 结构体&#xff08;struct&#xff09;是C语言&#xff08;以及其他一些编程语言&#xff09;中用于将不同类型的数据组合成一个单一类型的方式。这种数据类型允许你将多个变量&#xff08;可能是不同类型&#xff09;…

结合Boosting理论与深度ResNet:ICML2018论文代码详解与实现

代码见&#xff1a;JordanAsh/boostresnet: A PyTorch implementation of BoostResNet 原始论文&#xff1a;Huang F, Ash J, Langford J, et al. Learning deep resnet blocks sequentially using boosting theory[C]//International Conference on Machine Learning. PMLR, 2…

axure9设置组件自适应浏览器大小

问题&#xff1a;预览时不展示下方的滚动条 方法一&#xff1a;转化为动态面板 1.在页面上创建一个矩形 2.右键-转化为动态面板 3.双击进入动态面板设置 4.设置动态面板矩形的颜色 5.删除原来的矩形 6.关闭动态面板&#xff0c;点击预览 7.此时可以发现底部没有滚动条了 方法…

AI大模型之争:通用与垂直,谁将拔得头筹?

✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点赞、关注、收藏、评论&#xff0c;是对我最大…

移植案例与原理 - startup子系统之syspara_lite系统属性部件 (2)

系统属性部件syspara_lite负责提供获取与设置操作系统相关的系统属性&#xff0c;包括默认系统属性、OEM厂商系统属性和自定义系统属性。为满足OpenHarmony产品兼容性规范&#xff0c;产品解决方案需要实现获取设备信息的接口&#xff0c;如&#xff1a;产品名、品牌名、厂家名…

苹果Mac电脑遭恶意软件攻击 Mac第三方恶意软件删除不了

苹果Mac电脑一直以来都以安全性和稳定性著称&#xff0c;许多用户认为Mac电脑不会受到恶意软件的侵害&#xff0c;但事实上&#xff0c;Mac电脑也不是绝对安全的&#xff0c;近年来&#xff0c;有越来越多的恶意软件针对Mac电脑进行攻击&#xff0c;甚至有些恶意软件可以绕过苹…

如何看待SD3 版本,和SDXL相比有何优势?

胖友们好&#xff01;&#xff01;&#xff01;痴迷AI的本枕又来写Stable Diffusion了…… SD社区群众们翘首企盼的SD3的weights总算在huggingface上发布了 于是我也在当天非常激动地用ComfyUI生成了一些图像…… 这篇文章算是半个评测半个心得吧&#xff0c;因为有些东西是…

解禁日大涨,爱玛科技的投资前景值得信任吗?

6月17日&#xff0c;爱玛迎来6.28亿股、金额超190亿元的解禁&#xff0c;占总股本72.91%。不过&#xff0c;爱玛股价在巨量解禁中反而迎来涨势&#xff0c;因为这部分股票中&#xff0c;创始人张剑持有的限售股数量几乎就占了爱玛总股本的七成。某种意义上&#xff0c;市场认为…

Windows系统下制作Windows Server系统U盘启动及安装指导

Windows系统下制作Windows Server系统U盘启动及安装指导 一、准备工作 U盘不得小于8G(推荐使用usb3.0接口)&#xff1b;下载好对应的系统镜像&#xff1b;下载RUFUS或者软通碟U盘制作启动软件&#xff1b; 二、Windows操作系统下制作U盘启动&#xff08;这里以使用RUFUS软件…

面向对象和面向过程

Python完全采用了面向对象的思想&#xff0c;是真正面向对象的编程语言&#xff0c;完全支持面向对象的基本功能&#xff0c;例如&#xff1a;继承、多态、封装等。 Python支持面向过程、面向对象、函数式编程等多种编程方式。而Java编程语言支持面向对象的编程方式&#xff0…