C++使用Spdlog异步日志

Head-only库

#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE //为了使用源码函数行号等符号用的
#include "spdlog/spdlog.h"
#include "spdlog/async.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/rotating_file_sink.h"
#include "spdlog/sinks/daily_file_sink.h"// 这个是异步使用log
void multi_sink_example2()
{spdlog::init_thread_pool(8192, 1);spdlog::set_level(spdlog::level::trace);//consoleauto stdout_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt >();stdout_sink->set_level(spdlog::level::trace);// stdout_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%n] [%^%l%$] [thread %t] %v");stdout_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%^%l%$] [thread %t] %v");//file,rotating// auto rotating_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>("mylog.txt", 1024*1024*10,3);// rotating_sink->set_level(spdlog::level::debug);// rotating_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%n] [%l] [thread %t] [%g:%#] [Fcn:%!] %v");//file,dailyauto daily_sink = std::make_shared<spdlog::sinks::daily_file_sink_mt>("log", 23, 59);daily_sink->set_level(spdlog::level::trace);daily_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%n] [%l] [thread %t] [%g:%#] [Fcn:%!] %v");std::vector<spdlog::sink_ptr> sinks {stdout_sink, daily_sink};//create loggerauto logger = std::make_shared<spdlog::async_logger>("logger", sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_policy::block);spdlog::register_logger(logger);// spdlog::set_default_logger(logger);logger->info("logger-info-multi_sink_example2");logger->debug("logger-debug-multi_sink_example2");logger->error("logger-error-multi_sink_example2");logger->trace("logger-trace-multi_sink_example2");logger->warn("logger-warn-multi_sink_example2");logger->critical("logger-critical-multi_sink_example2");// logger->trace("multi_sink_example2");SPDLOG_LOGGER_TRACE(logger,"multi_sink_example2-trace");SPDLOG_LOGGER_INFO(logger,"multi_sink_example2-info");SPDLOG_LOGGER_WARN(logger, "warn message");SPDLOG_LOGGER_ERROR(logger, "error message");SPDLOG_LOGGER_CRITICAL(logger, "critical message");SPDLOG_LOGGER_DEBUG(logger, "debug message");
}
int main() 
{#if 0//这是默认的log方法,不是异步的spdlog::info("Welcome to spdlog!");spdlog::error("Some error message with arg: {}", 1);spdlog::warn("Easy padding in numbers like {:08d}", 12);spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin: {0:b}", 42);spdlog::info("Support for floats {:03.2f}", 1.23456);spdlog::info("Positional args are {1} {0}..", "too", "supported");spdlog::info("{:<30}", "left aligned");spdlog::debug("This message should be displayed..");  spdlog::set_level(spdlog::level::trace); // Set global log level to debugspdlog::debug("This message should be displayed..");spdlog::trace("Trace:This message should be displayed..");  // change log pattern// spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");// spdlog::debug("change log pattern..");    // Compile time log levels// Note that this does not change the current log level, it will only// remove (depending on SPDLOG_ACTIVE_LEVEL) the call on the release code.SPDLOG_TRACE("Some trace message with param {}", 42);SPDLOG_DEBUG("Some debug message");
#endifmulti_sink_example2();}/*
If you need to use source location flags like %s, %g, %#, %!, is necessary to define this compiler flag:#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE
(change the log level according to your needs) and use these macros:SPDLOG_LOGGER_TRACE(some_logger, "trace message");
SPDLOG_LOGGER_DEBUG(some_logger, "debug message");
SPDLOG_LOGGER_INFO(some_logger, "info message");
SPDLOG_LOGGER_WARN(some_logger, "warn message");
SPDLOG_LOGGER_ERROR(some_logger, "error message");
SPDLOG_LOGGER_CRITICAL(some_logger, "critical message");NOTE: if you've set the flag to SPDLOG_LEVEL_TRACE but you don't see any trace and/or debug messages, it's most likely something like this https://github.com/gabime/spdlog/issues/2764. In that case define it directly as a compiler flag. For example, using cmake:add_compile_definitions(SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE)Set global patten
Format can be applied globally to all registered loggers:spdlog::set_pattern("*** [%H:%M:%S %z] [thread %t] %v ***");
*/

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

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

相关文章

七天速通javaSE:第三天 程序控制结构:练习题

文章目录 前言一、基础1.计算从0~100之间奇数之和和偶数之和2. 用for循环输出0~1000之间能被5整除的数&#xff0c;每行输出三个 二、进阶1. 九九乘法表2.等边三角形 前言 本文主要讲解三种基本程序控制结构的练习题&#xff0c;以期熟练掌握顺序、选择、循环三种基本结构 一、…

怎么用Python接口发送推广短信

群发短信平台推广&#xff0c;有不少优点。其中通过正规106运营商平台推送&#xff0c;信息更加正规性。尤其是对接接口短信&#xff0c;比如验证码之类的&#xff0c;个人手机号码下发的验证码一般都不靠谱。 支持点对点一对一群发&#xff0c;方便工资条、物业通知等变量信息…

Android开发系列(十)Jetpack Compose之Card

Card是一种常用的UI组件&#xff0c;用于显示一个具有卡片样式的容器。Card组件通常用于显示列表项、卡片式布局或任何需要显示边框和阴影的UI元素。 使用Card组件&#xff0c;您可以轻松地创建带有卡片效果的UI元素。以下是一些Card组件的常见属性和功能&#xff1a; elevati…

【vuejs】$forceUpdate 的使用和讲解

1. $forceUpdate 概述 forceUpdate是Vue实例的一个内置方法&#xff0c;用于强制Vue组件重新渲染。通常情况下&#xff0c;Vue的响应式系统能够自动检测到数据的变化并更新DOM&#xff0c;但在某些特定情况下&#xff0c;可能需要手动触发重新渲染&#xff0c;$forceUpdate方法…

YOLOv5改进(七)--改进损失函数EIoU、Alpha-IoU、SIoU、Focal-EIOU

文章目录 1、前言2、损失函数代码实现2.1、修改metrics.py2.2、修改loss.py 3、替换EIOU4、替换SIoU5、替换Alpha-IoU6、替换Focal-EIOU7、目标检测系列文章 1、前言 YOLOv5默认使用损失函数为CIoU&#xff0c;本文主要针对损失函数进行修改&#xff0c;主要将bbox_iou函数进行…

云渲染农场使用指南:如何以最低成本享受最快渲染速度?

​云渲染农场怎么低成本享受快速渲染&#xff1f; 云渲染农场利用其分布式计算能力&#xff0c;为视觉艺术家提供了一种经济高效的渲染选择。它特别适用于高质量的影视动画和视觉效果制作。下面一起来看看如何以最低的成本实现快速渲染的策略。 在追求成本效益的同时&#xff…

第一百二十七节 Java面向对象设计 - Java枚举方法

Java面向对象设计 - Java枚举方法 因为枚举类型实际上是一个类类型&#xff0c;所以我们可以在枚举类型体中声明一切&#xff0c;我们可以在类体中声明它。 以下代码使用字段&#xff0c;构造函数和方法定义了一个级别枚举。 public enum Level {LOW(30), MEDIUM(15), HIGH(7…

2024年好用的加密工具,迅软DSE加密系统原来这么强大

加密软件具有灵活的加密方式和用户友好的操作界面&#xff0c;可定制个性化的安全方案&#xff0c;同时支持数据备份和恢复功能&#xff0c;确保数据的完整性和可用性&#xff0c;是保护数据安全、维护商业机密、防范信息泄露的重要工具。 2024好用的加密工具是哪个&#xff1f…

云计算:未来科技的基石

目录 什么是云计算&#xff1f; 云计算的分类 1. 基础设施即服务 (IaaS) 2. 平台即服务 (PaaS) 3. 软件即服务 (SaaS) 云计算的优势 1. 成本效益 2. 灵活性和可扩展性 3. 高可用性和可靠性 4. 创新和快速迭代 云计算的应用场景 1. 数据存储和备份 2. 大数据分析 3…

MySQL——基本的Select语句和别名使用

DQL &#xff08;Data Query Language&#xff1a;数据查询语言&#xff09; 所有的查询操作都用它 Select 简单或者复杂的查询都能做 数据库中最核心的语言&#xff0c;最重要的语句 使用频率最高的语言 指定查询字段 -- 查询全部的学生 SELECT 字段 FROM 表…

【SpringCloud-Seata客户端源码分析01】

文章目录 启动seata客户端1.导入依赖2.自动装配 发送请求的核心方法客户端开启事务的核心流程服务端分布式事务的处理机制 启动seata客户端 1.导入依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent…

【DS Solutions】一个反欺诈产品的进化,Stripe Radar

Stripe Radar 是 Stripe 提供的一项防欺诈服务&#xff0c;它利用机器学习技术来帮助商家检测和阻止信用卡欺诈行为。这篇文章是Stripe公司关于其反欺诈解决方案Stripe Radar的构建过程的介绍。文章从Stripe的防欺诈团队工程师的角度出发&#xff0c;详细讲述了Stripe Radar的工…

车辆数据的提取、定位和融合 精确车辆定位(其三.一 共十二篇)随机复合

第一篇&#xff1a; System Introduction 第二篇&#xff1a;State of the Art 第三篇&#xff1a;localization 第四篇&#xff1a;Submapping and temporal weighting 第五篇&#xff1a;Mapping of Point-shaped landmark data 第六篇&#xff1a;Clustering of landma…

礼让,不是一昧地退让,而是表达我们的素养、品德

礼 / 让&#xff0c;发心是文明相处&#xff0c;互助互让&#xff0c;是君子之交

覆盖容器的默认设置

覆盖容器都默认设置 目录 覆盖网络端口设置环境变量限制容器资源使用试一试 运行多个 Postgres 数据库实例在受控网络中运行 Postgres 容器管理资源在 Docker Compose 中覆盖默认的 CMD 和 ENTRYPOINT使用 docker run 覆盖默认的 CMD 和 ENTRYPOINT 额外资源下一步 当 Docker…

UnityShader SDF有向距离场简单实现

UnityShader SDF有向距离场简单实现 前言项目场景布置连连看画一个圆复制一个圆计算修改shader参数 鸣谢 前言 突然看到B站的一个教程&#xff0c;还不错&#xff0c;记录一下 项目 场景布置 使用ASE连连看&#xff0c;所以先要导入Amplify Shader Editor 连连看 画一个…

面试-JMM的内存可见性

1.JAVA内存模型 分析&#xff1a; 由于JVM运行程序的实体是线程&#xff0c;而每个线程创建时&#xff0c;JVM都会 为其创建一个工作内存(栈空间),用于存储线程私有的数据。而java内存模型中规定所有变量都存储在主内存中。主内存是共享内存区域&#xff0c;所有线程都可以访问…

Python-PDF文件密码破解小工具

背景 经常从网络上下载的PDF笔记被加了密&#xff0c;在自己学习的过程中想要添加书签却因为没有密码无法添加&#xff0c;所以通过Python实现一个解密小工具&#xff0c;亲测大多数密码都可以破解。 代码 import os import tkinter as tk from tkinter import filedialog #…

你还不知道Modbus RTU???

1. 什么是Modbus RTU Modbus RTU&#xff08;Remote Terminal Unit&#xff09;是Modbus通信协议的一种变种&#xff0c;用于串行通信。它是一种常见的工业控制系统通信协议&#xff0c;通常用于采集传感器数据、控制执行器和监控设备状态。Modbus RTU采用二进制编码&#xff0…

基于ruoyi-app的手机短信登录(uniapp)

本篇用于记录h5的框架搭建 组件地址:短信验证码登陆&#xff0c;手机号&#xff0c;验证码倒计时 - DCloud 插件市场 调整后的表单组件代码: <template><view class"login-view"><!-- <input type"tel" confirm-type"确认"…