一个简单可用的C++日志类
少废话,直接看东西。
//LogWriter.h
#pragma once
#include <stdio.h>#define LOG_BUFFER_SIZE 1024
class LogWriter
{
public:LogWriter(const char * filepath);~LogWriter(void);bool write(const char * format, ...);
private:static int preMark(char * buffer);
private:FILE * fp;char m_buffer[LOG_BUFFER_SIZE];
};
//LogWriter.cpp
#include "LogWriter.h"
#include <assert.h>
#include <share.h>
#include <stdarg.h>
#include <time.h>LogWriter::LogWriter(const char * filepath)
{fp = _fsopen(filepath, "a+", _SH_DENYNO);assert(fp != NULL);
}LogWriter::~LogWriter(void)
{if (fp) {fclose(fp);fp = NULL;}
}bool LogWriter::write(const char * format, ...)
{if (fp == NULL)return false;int nsize = 0;int prelen = 0;char * str = m_buffer;prelen = preMark(str);str += prelen;va_list args;va_start(args, format);nsize = _vsnprintf(str, LOG_BUFFER_SIZE - prelen, format, args);va_end(args);fprintf(fp, "%s\n", m_buffer);fflush(fp);return true;
}int LogWriter::preMark(char * buffer)
{time_t now;now = time(&now);struct tm vtm = *localtime(&now);return _snprintf(buffer, LOG_BUFFER_SIZE, "%04d-%02d-%02d %02d:%02d:%02d ",vtm.tm_year+1900, vtm.tm_mon, vtm.tm_mday, vtm.tm_hour, vtm.tm_min, vtm.tm_sec);
}
测试程序:
//main.cpp
#include "LogWriter.h"int main()
{LogWriter log("D:\\app.log");log.write("%s, %d", "hello", 123);
}
看效果:
PS:
程序可以改进的地方还有很多,但是已经可以用了,在一般的程序里面运行不会有问题。
一个简单可用的C++日志类相关推荐
- 实现自己的operator new和operator delete以及实现一个简单的内存池管理类
为什么有必要写自己的operator new和operator delete? 为了效率.缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特 ...
- 一个简单好用的日志框架NLog
之前我介绍过如何使用log4net来记录日志,但最近喜欢上了另一个简单好用的日志框架NLog. 关于NLog和log4net的比较这里就不多讨论了,感兴趣的朋友可以参看.NET日志工具介绍和log4n ...
- Qt5.9一个简单的多线程实例(类QThread)(第一种方法)
Qt开启多线程,主要用到类QThread.有两种方法,第一种用一个类继承QThread,然后重新改写虚函数run().当要开启新线程时,只需要实例该类,然后调用函数start(),就可以开启一条多线程 ...
- php简单的mysql类_一个简单的php mysql操作类
本文分享一个简单的php.mysql操作类,很简单,主要是数据的连接.查询等.有需要的朋友参考下吧. 分享一段php.mysql操作类的代码,供初学的朋友参考. 一个简单的类使用php和mysql数据 ...
- Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
本文将演示如何利用namespace创建一个完整的容器,并在里面运行busybox.如果对namespace不是很熟悉,请先参考前面几遍介绍不同类型namespace的文章. busybox是一个Li ...
- 一个简单又高效的日志系统
摘要:本文给出一个性能高,使用简单的日志解决方案.本模块实现日志信息的批量写入文件,定时自动flush到文件中,写入文件的日志级别可动态调整,单个日志文件大小可配置,循环对日志文件写入,这样不会造成机 ...
- 微信/易信公共平台开发(一):开发了一个简单易用的PHP类(提供源码),十几行代码搞定一个公众号
这两天学习了一下微信公共平台和易信公共平台的开发 (易信与微信协议是基本一样的)(PS:没听说过易信?你out了?) 公共平台开发原理这里就不讲了,如果是初次接触的同学,建议先看 David_Tang ...
- LowRecyclerView:一个简单强大的RecyclerView工具类
尊重原创,转载注明:http://blog.csdn.net/qq_35980424/article/details/72899985 在开发过程中我们经常使用Listview.GridView等以列 ...
- [Apple Shapr3D]【续更】【shapr3D】认识Shapr3D,一个简单易用的设计类软件
本文适合对象:工程设计.土木工程类的学生可以参考参考,以及对3D建模感兴趣的朋友!艺术设计的同学们,等等我!nomad我晚些再写!!! 使用的软件:Shapr3D 使用的硬件:iPad 9 gener ...
最新文章
- l bfgs算法java代码_优化算法——拟牛顿法之L-BFGS算法
- python if语句和循环语句
- 【网址收藏】WSL安装docker(不折腾版)
- 10 有关业务/事件类型WQ在年2021的号码范围不存在
- J2EE远程调试,远程debug你的线上Springboot项目
- 微软将本地版Exchange、SharePoint和Skype 纳入漏洞奖励计划
- 一个优质的Vue组件库应该遵循什么样的设计原则
- 如何成为一个AI产品经理?
- DataGear 自定义数据可视化图表
- 因果系列文章(1):因果推断及相关论文
- 苹果CMSV10本地DPLAYER播放器自动下一集设置教程
- 英语affrike非洲affrike单词
- mysql获取年月日周季度
- Oracle dual表详解(zzl)
- 06 - 微信公众号的菜单配置
- DataStage History
- 3dmax入门 | 学3d建模必备软件技能基础教学
- 计算机网络超级详细的总结(1)
- [转]漫画:混乱的标记语言XHTML2/HTML5(附中文版翻译)
- 5.19 c语言--循环选择--找到N个数中最大的一个数
热门文章
- 如何了解一个软件的设计?
- HVF5220-4D-03,HVF3230-3G-02先导型二位五通电磁阀
- 流氓软件卸载后又自动安装怎么办
- DataRow对象的RowState和DataRowVersion属性特点
- 服务器虚拟化的未来展望,IT号外:未来展望之拥抱虚拟化3.0
- python编写一个函数,输入n为偶数时,调用函数求1 / 2 + 1 / 4 + ... + 1 / n, 当输入n为奇数时,调用函数1 / 1 + 1 / 3 + ... + 1 / n(指针函数
- 计算机毕业设计基于asp.net的大学生交友网站
- 3.9使用ValidationSummary控件
- 如何正确使用HTTP代理?
- 商业模式创新与设计 -- 黄力泓