c++日志单例实现

为了使项目的所有日志都打印到同一个日志中,必须使得所有类使用同一个日志,因此将日志类实现为单例。

.h文件

#pragma once#include<fstream>class LogHablee
{
private:LogHablee(std::string& dbg_dir);LogHablee(const LogHablee&) = delete;LogHablee& operator=(const LogHablee&) = delete;static LogHablee* _ins;	public:void getNowTimePrefix(std::string& now_time_prefix);public:static LogHablee* getInstance(std::string& dbg_dir){if (_ins == nullptr){_ins = new LogHablee(dbg_dir);}return _ins;}std::ofstream log;
};

.cpp文件

#include "LogHablee.h"
#include<string>LogHablee* LogHablee::_ins = nullptr;LogHablee::LogHablee(std::string& dbg_dir)
{std::string nowTimePrefix;getNowTimePrefix(nowTimePrefix);std::string logFilePath(dbg_dir + "/" + nowTimePrefix + "_log.txt");this->log.open(logFilePath, std::ios::trunc);
}void LogHablee::getNowTimePrefix(std::string& now_time_prefix)
{std::time_t now_time;struct tm* p = new tm;std::time(&now_time);localtime_s(p, &now_time);int year = p->tm_year + 1900;int month = p->tm_mon + 1;int day = p->tm_mday;int hour = p->tm_hour;int minute = p->tm_min;int second = p->tm_sec;delete p;// 20221130_134024: 2022年11月30日13点40分24秒now_time_prefix = std::to_string(year)+ std::string(2 - std::to_string(month).length(), '0') + std::to_string(month)+ std::string(2 - std::to_string(day).length(), '0') + std::to_string(day)+ "_"+ std::string(2 - std::to_string(hour).length(), '0') + std::to_string(hour)+ std::string(2 - std::to_string(minute).length(), '0') + std::to_string(minute)+ std::string(2 - std::to_string(second).length(), '0') + std::to_string(second);
}

另一个使用到log的类的.h文件

#pragma once
#include<string>class AClass
{
public:AClass(std::string& dbg_dir):_dbgDir(dbg_dir) {}void test();private:std::string _dbgDir;
};

# 另一个使用到log的类的.cpp文件

#include "AClass.h"
#include"LogHablee.h"void AClass::test()
{std::string nowTimePrefix;LogHablee* pHablee = LogHablee::getInstance(this->_dbgDir);pHablee->getNowTimePrefix(nowTimePrefix);pHablee->log << nowTimePrefix<< ": in AClass::test function"<< std::endl;
}

main函数

#include"LogHablee.h"
#include<iostream>
#include"AClass.h"int main()
{std::string nowTimePrefix;std::string dbgDir("./");LogHablee* pHablee = LogHablee::getInstance(dbgDir);pHablee->getNowTimePrefix(nowTimePrefix);pHablee->log << nowTimePrefix<< ": PROGRAM START, version 1.0.0.0"<< std::endl;AClass a(dbgDir);a.test(); // a.test()里面的日志内容也会写入到一开始创建的日志中return 0;
}

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

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

相关文章

Postgresql BatchInsert唯一键冲突及解决

Postgresql BatchInsert唯一键冲突及解决 当有唯一键冲突时&#xff0c;批量插入可能会报错&#xff1b; insert into tableA(sno,name,age,emp) values(),(),(); 会报错 insert into tableA(sno,name,age,emp) values(),(),() on conflict on contraint tableA_unique_key do …

diff 算法

此文章可帮助读者快速了解diff算法的理论知识,参考其他文章结合自己理解 核心思想 Diff算法,至根节点到叶节点,从左到右,从上到下,依次遍历进行对比 应用场景 虚拟dom 再Vue中和React有应用到 将dom变化前和变化后的状态,而产生虚拟dom树,再path里面进行diff算法,最后操作…

腾讯云自研星星海双路服务器SA5实例AMD处理器性能测评

腾讯云服务器标准型SA5实例是最新一代的标准型实例&#xff0c;CPU采用AMD EPYC™ Bergamo全新处理器&#xff0c;采用最新DDR5内存&#xff0c;默认网络优化&#xff0c;最高内网收发能力达4500万pps。腾讯云百科txybk.com分享腾讯云标准型SA5云服务器CPU、内存、网络、性能、…

一条Update语句的执行过程是怎样的?

先看第一个问题&#xff0c;这里做个简单描述 &#xff0c;因为我们着重还是看Update MySQL执行一条Select语句是怎么运行的&#xff1f; 这个问题大家在面试的时候大家都背过类似的题&#xff0c;而且网上也有很多答案&#xff0c;这里分享一个大致流程介绍&#xff0c;关于…

docker network容器网络通信

Docker 网络主要有以下两个作用&#xff1a; 容器间的互联和通信以及端口映射容器IP变动时候可以通过服务名直接网络通信而不受到影响 只要是处于同一个Docker 网络下的容器就可以使用服务名直接访问&#xff0c;而无需担心重启。 docker容器网络模式 bridge网络模式&#…

工业级 S25HS01GTDPBHV030 NOR闪存,L9305EP汽车级驱动器IC,LMK03318RHSR时钟发生器,PLL(中文资料)

一、工业级 S25HS01GTDPBHV030 Semper™ NOR闪存 S25HS01GT SEMPER™ NOR Flash闪存系列是英飞凌高性能、安全而可靠的 NOR Flash解决方案。 它集成了适用于汽车、工业、通信等广泛应用的关键安全功能。 凭借 SEMPER™ NOR Flash闪存&#xff0c;英飞凌推出了业界首款符合 ASI…

多线程04 线程安全问题以及一些简单的解决策略

前言 首先我们引入多线程是为了解决多次创建进程和销毁进程带来的巨大开销,线程可以共享内存和硬盘资源等等,这里我们就会想,他们共享这些东西会不会涉及到一些安全问题呢?他们没有独立分配自己的资源是一定会有安全问题的,但是就目前在这个快节奏的社会来说,效率的提升是必然…

Python编程之魂之运算符的优先级教程

文章目录 前言优先级概述相同优先级结合性运算符优先级一览表运算符优先级重点说明结语关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资…

深度学习基于Python+TensorFlow+Django的水果识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介技术组合系统功能使用流程 二、功能三、系统四. 总结 一项目简介 # 深度学习基于PythonTensorFlowDjango的水果识别系统介绍 简介 该水果识别系统基于…

PaddleOCR学习笔记

Paddle 功能特性 PP-OCR系列模型列表 https://github.com/PaddlePaddle/PaddleOCR#%EF%B8%8F-pp-ocr%E7%B3%BB%E5%88%97%E6%A8%A1%E5%9E%8B%E5%88%97%E8%A1%A8%E6%9B%B4%E6%96%B0%E4%B8%AD PP-OCR系列模型列表&#xff08;V4&#xff0c;2023年8月1日更新&#xff09; 配置文…

【论文解读】Edit-DiffNeRF:使用2D-扩散模型编辑3D-NeRF

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2306.09551 摘要 最近的研究表明&#xff0c;将预训练的扩散模型与神经辐射场&#xff08;NeRF&#xff09;相结合&#xff0c;是一种很有前途的文本到 3D 的生成…

因特网的典型应用所使用的TCP/IP应用层协议和相应的传输层协议

因特网应用TCP/IP应用层协议TCP/IP传输层协议域名解析DNS&#xff08;域名系统&#xff09;UDP文件传送TFTP&#xff08;简单文件传送协议&#xff09;UDP路由选择RIP&#xff08;路由信息协议&#xff09;UDP网络参数配置DHCP&#xff08;动态主机配置协议&#xff09;UDP网络…

使用bard分析视频内容

11月21日的bard update 更新了分析视频的功能&#xff0c;使用方法如下&#xff1a; 1、打开bard网站。https://bard.google.com/ 2、点击插件。 3、点击YouTube中的 research a topic 选项。 4、输入需要分析的内容&#xff1a; Please analyze how many technologies are in…

企业计算机中了locked勒索病毒怎么解锁,locked勒索病毒解密,数据恢复

科技的进步为企业的生产生活提供了极大便利&#xff0c;但随之而来的网络安全威胁也不断增加&#xff0c;近期云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的计算机服务器遭到了locked勒索病毒攻击&#xff0c;导致企业的所有业务无法正常开展&#xff0c;所有计算…

接口测试场景:怎么实现登录之后,需要进行昵称修改?

在接口测试中有一个这样的场景&#xff1a;登录之后&#xff0c;需要进行昵称修改&#xff0c;怎么实现&#xff1f; 首先我们分别看下登录、昵称修改的接口说明&#xff1a; 以上业务中补充一点&#xff0c;昵称修改&#xff0c;还需要添加请求头Authorization传登录获取的to…

LeetCode Hot100 114.二叉树展开为链表

题目&#xff1a; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同…

【docker】docker的基础命令

基础操作 docker info #查看docker的基本信息docker version #查看docker版本信息一、镜像操作 1、搜索镜像 docker search nginx2、下载镜像 docker pull nginx#从仓库中下载镜像&#xff0c;若没有指定标签&#xff0c;则下载最新的版本&#xff0c;也就是标签为: lat…

【C++初阶】STL详解(六)Stack与Queue的介绍与使用

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

C/C++ 通过SQLiteSDK增删改查

SQLite&#xff0c;作为一款嵌入式关系型数据库管理系统&#xff0c;一直以其轻量级、零配置以及跨平台等特性而备受青睐。不同于传统的数据库系统&#xff0c;SQLite是一个库&#xff0c;直接与应用程序一同编译和链接&#xff0c;无需单独的数据库服务器进程&#xff0c;实现…

力扣114. 二叉树展开为链表(java,用树模拟链表)

Problem: 114. 二叉树展开为链表 文章目录 题目描述思路解题方法复杂度Code 题目描述 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 1.展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左…