c++ 简单的日志类 CCLog
此日志类,简单地实现了向标准输出控制台和文件输出日志信息的功能,并能在这两者之间进行切换输出,满足输出日志的不同需求。
代码如下:
/** CCLog.h* c++_common_codes** Created by xichen on 12-1-12.* Copyright 2012 cc_team. All rights reserved.*
*/
#ifndef CC_LOG_H
#define CC_LOG_H#include "ccString.h"
#include <cstdio>typedef enum _LOG_TYPE
{LOG_TYPE_CONSOLE,LOG_TYPE_FILE,LOG_TYPE_MAX
}LOG_TYPE;class CCLog
{
public:CCLog(const char * fileName = NULL, const char * mode = "at+"); // by default, open file by "at+" mode~CCLog();public:unsigned write(const CCString & str);unsigned writeEndl();void clearAllData(); // if a file is opened, all contents of the file will be cleared, the file will be opened a second time.public:void setWriteToConsole();void setWriteToFile();public:LOG_TYPE getLogType() const { return _logType; }CCString getLogFileName() const { return _fileName; }private: void clearConsole() // not coding ok{}private:CCLog(const CCLog & log);CCLog & operator=(const CCLog & log);private:FILE *_file;FILE *_backupFile;CCString _fileName;LOG_TYPE _logType;
};#endif
/** CCLog.cpp* c++_common_codes** Created by xichen on 12-1-12.* Copyright 2012 cc_team. All rights reserved.*
*/
#include "ccLog.h"CCLog::CCLog( const char * fileName /*= NULL*/, const char * mode /*= "at+"*/ )
{if(fileName == NULL){_file = _backupFile = NULL;_logType = LOG_TYPE_CONSOLE;return;}_logType = LOG_TYPE_FILE;_file = fopen(fileName, mode);_backupFile = _file;if(_file == NULL)std::cerr << "Open file error" << std::endl;else_fileName = CCString(fileName);
}CCLog::~CCLog()
{if(_logType == LOG_TYPE_FILE){if(_file != NULL){fclose(_file);return;}if(_backupFile != NULL){fclose(_backupFile);}}
}unsigned CCLog::write( const CCString & str )
{if(_logType == LOG_TYPE_CONSOLE){std::cout << str;return str.length(); // it's not accurate. ????}fseek(_file, 0, SEEK_END);return fwrite(str.c_str(), str.length(), 1, _file);
}unsigned CCLog::writeEndl()
{return write(CCString("\n"));
}void CCLog::clearAllData()
{if(_logType == LOG_TYPE_CONSOLE)return;if(_backupFile != NULL)_file = _backupFile;fclose(_file);_file = fopen(CCString(_fileName), "wt+"); // clear all the data of file_backupFile = _file;if(_file == NULL)std::cerr << "clearAllData:Open file error" << std::endl;
}void CCLog::setWriteToConsole()
{_logType = LOG_TYPE_CONSOLE;
}void CCLog::setWriteToFile()
{_logType = LOG_TYPE_FILE;
}
简单地测试代码如下:
void ccTestLog()
{
#if 1 // CCLogCCLog * log = new CCLog(NULL);log->write("hello");log->write("\t1\n");log->write("\txichen\n");delete log;log = new CCLog("d:\\test\\logtest.txt");log->write("ab\t\n1");delete log;log = new CCLog("d:\\test\\logtest.txt");log->write("xiche\t123");log->clearAllData();log->write("after clear");log->setWriteToConsole();log->write("the console info");log->setWriteToFile();log->write("the file content");log->writeEndl();log->write("the next line\nhehe");delete log;
#endif
}
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好!
相关文章:
c++ 简单的日志类 CCLog
此日志类,简单地实现了向标准输出控制台和文件输出日志信息的功能,并能在这两者之间进行切换输出,满足输出日志的不同需求。 代码如下: /** CCLog.h* c_common_codes** Created by xichen on 12-1-12.* Copyright 2012 cc_te…...
一文读懂 Compose 支持 Accessibility 无障碍的原理
前言 众所周知,Compose 作为一种 UI 工具包,向开发者提供了实现 UI 的基本功能。但其实它还默默提供了很多其他能力,其中之一便是今天需要讨论的:Android 特色的 Accessibility 功能。 采用 Compose 搭建的界面,完美…...
Redis到底支不支持事务?
文章目录 一、概述二、使用1、正常执行:2、主动放弃事务3、全部回滚:4、部分支持事务:5、WATCH: 三、事务三阶段四、小结 redis是支持事务的,但是它与传统的关系型数据库中的事务是有所不同的 一、概述 概念: 可以一次执行多个命令,本质是一…...
美颜相机「BeautyCam」v12.0.80 祛广告解索会员版(美妆相机功能,展现女神魅力)
软件介绍 美颜相机,一款由知名移动互联网企业Meitu Inc.开发的移动设备照片编辑与美化应用,起初主要针对娱乐消费市场,随后集成了商业营销功能。目前,它已跻身全球最受欢迎的手机摄影应用程序之列。在中国,美颜相机和…...
Oracle的优化器
sql优化第一步:搞懂Oracle中的SQL的执行过程 从图中我们可以看出SQL语句在Oracle中经历了以下的几个步骤: 语法检查:检查SQL拼写是否正确,如果不正确,Oracle会报语法错误。 语义检查:检查SQL中的访问对象…...
[线程与网络] 网络编程与通信原理(六):深入理解应用层http与https协议(网络编程与通信原理完结)
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀Java …...
个人博客的未来出路在哪里?
说起个人博客的未来这就是个悲伤的话题,估计不少个人博客站长们都在苦苦的坚持和挣扎着吧,反正明月这两年感受最深刻的就是又有不少个人博客站点停更和 404 了都。自从坚持写博客这近十来年这种情况也都见怪不怪了,但这两年最突出的就是很多站长都是迷茫和悲观。 明月去年在…...
【TensorFlow深度学习】实现Actor-Critic算法的关键步骤
实现Actor-Critic算法的关键步骤 实现Actor-Critic算法的关键步骤:强化学习中的双剑合璧Actor-Critic算法简介关键实现步骤代码示例(使用TensorFlow)结语 实现Actor-Critic算法的关键步骤:强化学习中的双剑合璧 在强化学习的广阔…...
微服务架构-可见可观测与量化分析体系
目录 一、可见可观测 1.1 概述 1.2 服务可见性 1.2.1 概述 1.2.2 服务描述 1.2.3 服务所有权 1.2.4 服务对外接口 1.2.5 服务SLA 1.2.6 服务的上下游拓扑 1.2.7 服务变更 1.2.8 服务接入和资源配额管理 1.2.9 服务线上部署和线下测试环境信息 1.3 变更可见性 1.4 …...
PostgreSQL的视图pg_indexes
PostgreSQL的视图pg_indexes 基础信息 OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本:16.2 pg软件目录:/home/pg16/soft pg数据目录:/home/pg16/data 端口:5777pg_indexes 是 PostgreSQL 中的一…...
暂停系统更新
电脑左下角搜索注册表编辑器 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 找到这个目录 打开FlightSettingsMaxPauseDays,没找到的话就创建一个同名文件夹然后选择10进制填入3550 最后进入系统暂停更新界面选择最下面…...
Python离线查询IP地址对应的国家和城市
使用场景: 在没网的情况下使用python代码实现对ip地址进行查询国家和地市 代码实现: 需要安装 pip install geoip2 库 import geoip2.databasedef get_location_by_ip(ip_address, db_path):reader geoip2.database.Reader(db_path)try:response r…...
使用Aspose技术将Excel/Word转换为PDF
简介:本文将介绍如何使用Aspose技术将Excel文件转换为PDF格式。我们将使用Aspose-Cells-8.5.2.jar包,并演示Java代码以及进行测试。 一、Aspose技术概述 Aspose是一款强大的文档处理库,支持多种编程语言,如Java、C#、Python等。…...
Opencv 色彩空间
一 核心知识 色彩空间变换; 像素访问; 矩阵的、-、*、、; 基本图形的绘制 二 颜色空间 RGB:人眼的色彩空间; OpenCV默认使用BGR; HSV/HSB/HSL; YUV(视频); 1 RGB 2 BGR 图像的多种属性 1 访问图像(Ma…...
FileZilla:不安全的服务器,不支持 FTP over TLS 原因与解决方法
今天在用FileZilla Client连接某个主机的FTP的时候,主机地址、账号、密码、端口确定百分之百正确的情况下,结果报错如下: 状态: 正在解析 x.x.x 的地址 状态: 正在连接 x.x.x.x:21... 状态: 连接建立,等待欢迎消息... 状态: 不安全…...
自定义注解实现Excel 导出
概述 一个用自定义注解实现导出字段定义的工具实现。 1. 注解定义,定义导出Excel的字段 Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface PoiExportField {// Label of the columnString label();// Order of the column,default 0,means t…...
先求生存,再谋发展:俞敏洪的创业哲学与产品创新之路
引言: 在创业的道路上,每一个创业者都面临着无数的挑战和选择。俞敏洪,新东方教育科技集团的创始人,以其独特的创业哲学和坚韧不拔的精神,带领新东方从一个小小的培训机构成长为全球知名的教育品牌。他的成功经验告诉…...
【Spark】直接从DataFrame的schema创建表
// 基于DataFrame创建表 def createTable(dataFrame: DataFrame,partitionColumns: Array[String],databaseName: String,tableName: String): Unit = {...
Decimal要从str转换以避免精度问题
最近遇到一个python的小数的问题,本来应该很简单的小于判断,无论如何都不正确,而且浮点小数都没问题,但decimal小数有问题,给我整蒙了,后来才发现是对decimal不了解所致,如果你还用float转decim…...
STM32项目分享:智能家居安防系统
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…...
虚拟光驱软件Daemon Tools Lite
链接:https://pan.quark.cn/s/ebc5b998a07bDaemon Tools Lite 是一款免费、稳定、方便、优秀的虚拟光驱软件。安装后会自动在资源管理器生成一个和真实光驱一样的盘符,让您像访问真正光驱一样来访问虚拟光驱。Daemon Tools Lite 还可以模拟备份并且合并保…...
【生产环境实录】Mojo嵌入Python解释器时core dump突增300%:我们如何通过LLVM IR层Hook定位并修复内存所有权越界
第一章:【生产环境实录】Mojo嵌入Python解释器时core dump突增300%:我们如何通过LLVM IR层Hook定位并修复内存所有权越界问题现象与紧急响应 上线后72小时内,Mojo服务在调用 PyRun_String 执行动态Python代码片段时,core dump率从…...
MedGemma Medical Vision LabGPU优化:FP16量化+KV Cache压缩使A10显存占用降低42%
MedGemma Medical Vision Lab GPU优化:FP16量化KV Cache压缩使A10显存占用降低42% 1. 项目背景与挑战 MedGemma Medical Vision Lab 是一个基于 Google MedGemma-1.5-4B 多模态大模型构建的医学影像智能分析 Web 系统。这个系统通过 Web 界面实现医学影像与自然语…...
VMware虚拟机中SenseVoice-Small开发环境快速搭建
VMware虚拟机中SenseVoice-Small开发环境快速搭建 1. 引言 语音识别技术正在快速发展,而SenseVoice-Small作为一个高效的多语言语音识别模型,为开发者提供了强大的工具。但在实际开发中,我们经常需要一个隔离的环境来测试和部署模型&#x…...
Win11官方下载与优化:为FLUX小红书V2准备最佳运行环境
Win11官方下载与优化:为FLUX小红书V2准备最佳运行环境 1. 准备工作与环境检查 在开始安装FLUX小红书V2之前,我们需要确保系统环境达到最佳状态。这个图像生成工具对硬件和系统都有一定要求,特别是对GPU的性能比较敏感。 首先检查一下你的硬…...
大数据领域数据科学与云计算的结合应用
大数据领域数据科学与云计算的结合应用 关键词:大数据、数据科学、云计算、结合应用、数据分析 摘要:本文深入探讨了大数据领域中数据科学与云计算的结合应用。首先介绍了数据科学和云计算的背景知识,然后详细解释了这两个核心概念及其相互关系。通过具体的算法原理、数学模…...
35:L构建数据泄露检测:蓝队的数据保护
作者: HOS(安全风信子) 日期: 2026-03-11 主要来源平台: GitHub 摘要: 当基拉开始针对数据进行攻击时,数据泄露成为蓝队防御的关键挑战。L构建了数据泄露检测系统,通过AI算法分析数据流动、访问模式和异常行…...
破解MSG文件解析难题:自动化处理工具让邮件数据提取效率提升90%
破解MSG文件解析难题:自动化处理工具让邮件数据提取效率提升90% 【免费下载链接】msg-extractor Extracts emails and attachments saved in Microsoft Outlooks .msg files 项目地址: https://gitcode.com/gh_mirrors/ms/msg-extractor 在日常办公中&#x…...
阅读书源校验工具verifyBookSource v2.0避坑指南:如何避免无效书源和重复书源
verifyBookSource v2.0 高效书源管理实战:从校验到优化的完整指南 在数字阅读日益普及的今天,一个优质的书源库能显著提升阅读体验。然而,面对海量书源,如何快速筛选有效内容、剔除重复资源,成为许多阅读爱好者的痛点。…...
5个技巧让Markdown Viewer成为你的浏览器文档中心
5个技巧让Markdown Viewer成为你的浏览器文档中心 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 还在为浏览器无法直接预览Markdown文档而烦恼吗?Markdown Viewer浏览…...
