自己编写的 C++ 超轻量级日志类

【自己编写的 C++ 超轻量级日志类(兼容vc++6.0、vs2010、vs2015)】

先来看效果:

【测试文件:test.cpp】

/*
作者:闫文山

时间:2017/07/02

介绍:
本日志类功能强大:

1、小巧可爱,全程序(YLog.h+YLog.cpp)不过一百余行而已,比之网上其他的如log4cpp等堪称超轻量级;

2、可输出每条日志信息的日志级别、输出时间(可精确到毫秒级)、所在程序文件名、所在行数、日志信息(支持可变长、标准格式化 %s,%d,%f 等参数);

3、兼容性强大,在vc++6.0、vs2010、vs2015上都测试通过;

4、构造函数为YLog(const int type, const int level,std::string logname="");

type:可定义每一个日志文件的输出方式,支持每次程序运行追加(YLOG_ADD)或覆盖(YLOG_OVER)之前的日志文件;

level:可定义下限级别有严格程度从低到高的TRACE < INFO < WARNING < ERROR < FATAL < RELEASE 六种日志级别,仅当调用日志输出函数的输出级别高于定义下限级别时才会往日志文件中写日志;下限设为最高release级别时不会产生日志文件;

logname:可定义每一个日志输出的文件路径,支持相对路径与绝对路径,文件夹不存在依然能自己创建;可以省略不写,则默认在当前文件夹下产生对应程序名称的日志文件。
*/

#include "YLog.h"

int main(){

    //创建日志对象log1,日志输出文件为绝对路径的"D:\\y1.log",如果存在则追加;日志输出下限级别为INFO级别
    YLog log1(YLOG_ADD, YLOG_INFO,"D:\\y1.log");
    //创建日志对象log2,日志输出文件为相对路径的"y2.log",如果存在则覆盖;日志输出下限级别为ERROR级别
    YLog log2(YLOG_OVER, YLOG_ERROR,"y2.log");

    int a = 256;
    double b = 0.789;
    std::string c = "hello";

    log1.w(YFL,YLOG_INFO, "info级别的日志输出:%d",a);//INFO级别不低于log1的下限INFO级别,正常写入日志文件
    a++;
    log1.w(YFL,YLOG_WARNING, "warning级别的日志输出:%d",a);//正常写入
    a++;
    log1.w(YFL,YLOG_ERROR, "error级别的日志输出:%d",a);//正常写入
    a++;
    log1.w(YFL,YLOG_FATAL,"fatal级别的日志输出:%d,%f,%s",a,b,c.c_str());//正常写入

    log2.w(YFL,YLOG_INFO, "info级别的日志输出:%f",b);//INFO级别低于log2的下限ERROR级别,不写入日志
    b*=10;
    log2.w(YFL,YLOG_WARNING, "warning级别的日志输出:%f",b);//不写入日志
    b*=10;
    log2.w(YFL,YLOG_ERROR, "error级别的日志输出:%f",b);//正常写入
    b*=10;
    log2.w(YFL,YLOG_FATAL,"fatal级别的日志输出:%d,%f,%s",a,b,c.c_str());//正常写入

    return 0;
}

【输出日志1:D:\\y1.log】

【输出日志2:y2.log】

日志类,就是把程序运行的相应信息保存到日志文件中以供查看。

本日志类功能强大:

1、小巧可爱,全程序(YLog.h+YLog.cpp)不过一百余行而已,比之网上其他的如log4cpp等堪称超轻量级;

2、可输出每条日志信息的日志级别、输出时间(可精确到毫秒级)、所在程序文件名、所在行数、日志信息(支持可变长、标准格式化 %s,%d,%f 等参数);

3、兼容性强大,在vc++6.0、vs2010、vs2015上都测试通过;

4、构造函数为YLog(const int type, const int level,std::string logname="");

type:可定义每一个日志文件的输出方式,支持每次程序运行追加(YLOG_ADD)或覆盖(YLOG_OVER)之前的日志文件;

level:可定义下限级别有严格程度从低到高的TRACE < INFO < WARNING < ERROR < FATAL < RELEASE 六种日志级别,仅当调用日志输出函数的输出级别高于定义下限级别时才会往日志文件中写日志;下限设为最高release级别时不会产生日志文件;

logname:可定义每一个日志输出的文件路径,支持相对路径与绝对路径,文件夹不存在依然能自己创建;可以省略不写,则默认在当前文件夹下产生对应程序名称的日志文件。

【附:下载链接http://download.csdn.net/detail/yws_swy/9886382

时间: 2024-11-08 08:45:27

自己编写的 C++ 超轻量级日志类的相关文章

NicEditor——超轻量级文本编辑器

NicEdit是一个轻量级,跨平台的Inline Content Editor.NicEdit能够让任何 element/div变成可编辑或者能够把标准的TextArea转换成富文本编辑器. 相较于以前用过的FreeTextBox,NicEdit更加的轻便,其轻量级的程度--总共就一个JS文件和一张图片,而且使用也十分简单.引用下载好的JS文件,然后调用相应的JS函数,将TextBox控件转变成富文本编辑器. 英文本: <span style="font-size:14px;"&

日志类(一)字段

今年一直想写一个基于完成端口的服务器,但是因为生活上的事屡屡推迟.此次怀着进行到底的决心开始.给自己的目标每周2单元(业余爱好者,能写的时间不多.2单元安排比较合理) 言归正传.一个完备的服务器首先必不可缺的是预警系统.无论是内部错误,还是外部攻击.都应该有响应的处理,那么记录下服务器的状态是我们分析问题的关键.那么日志类应运而生. 一个工程级的日志类应具备消耗资源少(CPU,内存),稳定,便于管理和查看的特点.数据库模式就值得我们参考,写一个轻量级的防数据库模式的日志类是此次目标. 我将此次工

支持异步写入的日志类,支持Framework2.0

因为工作需要需要在XP上运行一个C#编写的Winform插件,我就用Framework2.0,因为存在接口交互所以想保留交易过程的入参出参. 考虑到插件本身实施的因素,就没有使用Log4.NLog等成熟的日志插件.在网上搜索了一个是通过TextWriterTraceListener实现的,但是实际使用 过程中发现并没实现我想要的功能,于是乎自己重新造了个轮子,如果大家有需要可以参考下. 1 /// <summary> 2 /// 日志类型 3 /// </summary> 4 pu

c++ 日志类 线程安全+缓存

根据上一次的测试,有缓存的日志类性能会更好.用到了time.h类函数,所以在linux下就要改动一下了,windows环境下写的. 思路采用(参照muduo库的日志,不过认为他线程不安全,和没用缓存,就改造了下) 1.有一个总的缓存,logboss,为一个恶汉模式的单例类,指针对象为智能指针,析构函数讲缓存写入文件. 2.有一个logger类,作为临时缓存,析构函数,将里面的缓存写入总缓存(在总缓存写入的时候加锁).如果缓存超过一定限度,就将前面的缓存写入文件先. void LogBoss::a

怎么样做好日志类的报警监控

上一篇文章写了普通数字类型类型的监控报警,本文谈一下怎么样做好日志类的监控和报警 一.日志类报警的特点 1.接受人员希望直接看到日志的内容: 2.对应技术栈涉及比较广的系统,,一个问题会引发不同主机上面不同系统同时产生日志.举例:openstack 的nova在保存快照时出错,会引起nova-api,galnce-api,horizen同时产生错误日志. 二.遇到的痛点: 1.有很多人想随时查看日志,不同的人想要查看不同的日志: 2.日志类的报警,不适合用微信直接发送内容,原因一是转义麻烦,二是

C++开源日志类

今天想给我的C++项目找一个开源的日志类,用于记录系统日志,结果浪费了半个下午的时间.从网上搜索相关资料,找到以下几个备选方案: 1.log4cplus 下载地址:http://sourceforge.net/projects/log4cplus/files/log4cplus-stable/1.1.0 2.log4cxx 下载地址:http://logging.apache.org/log4cxx/download.html (log4cxx 是由JAVA实现的 log4j 开源的,用C++实

简易的日志类

打日志是开发不可或缺的功能, 它经常比断点好用, 并且可用性更广. 在很久以前, 我总习惯性的printf, cout, 把日志打印在控制台. 直到我发现, 这除了针对性的看日志, 并没有什么乱用. 你的程序提交到测试那里, 程序出现意外, 你不能指望测试给你提供崩溃当时的日志, 也不能及时赶到现场, 发动写轮眼记下原因. 所以, 日志除了打印在屏幕, 还要写日到文件... 1 // 日志写入. 2 class Log { 3 public: 4 // 日志结束符. 5 class End {}

C#日志类记录

每个程序都要和日志打交道.程序日志的质量直接影响了排除问题的难度.普通程序调试信息直接输出控制台,复杂程序则通过文本,xml等方式记录运行时的调试信息.在C#中Diagnostics命名空间下有一个微软提供的专门用于记录信息的TraceSource类.TraceSource的使用方法很简单,只需要4行代码 TraceSource ts = new TraceSource("Code.Main", SourceLevels.All); ts.Listeners.Add(new Conso

WorldWind源码剖析系列:日志类Log

Utility工程中的日志类Log主要用来输出Debug状态下的调试信息.该类的类图如下: 日志类Log中使用到的类和内嵌结构体类型主要有以下这些: public class LogEventArgs : EventArgs//日志事件参数 { public int level; public string category; public string message; public LogEventArgs(int _l, string _c, string _m) { level = _l