自己编写的 C++ 超轻量级日志类
注意:最新版本在https://github.com/ywsswy/ylog
【自己编写的 C++ 轻量级日志类(兼容linux、vc++6.0、vs2003、vs2010)】
先来看效果:
【测试文件:main.cpp】
/*
# 本日志类特点 * 小巧可爱,全程序(YLog.h)仅60多行,使用方便。
* 不定义宏,全局变量等,减少污染,低碳环保。
* 使用标准库,兼容windows和linux平台。
* 多线程安全。(但低本版编译器如 vc++6.0 会使用localtime等线程不安全的函数)
* 可输出每条日志信息的日志级别、输出时间、所在程序文件名、所在代码行数、日志信息。 # 使用介绍 构造函数为 YLog(const int level, const std::string &logfile, const int type = YLog::OVER);
level:指定日志级别下限,ERROR级别(YLog::ERROR)或INFO级别(YLog::INFO),仅当调用日志输出函数的输出级别达到定义下限级别时才会往日志文件中写日志。(例如,下限定义成YLog::ERROR,那么所有 INFO 级别的信息将不会写入日志文件)
logfile:指定输出日志文件名。(如果含路径,请保证路径文件夹存在)
type:指定每一个日志文件的输出方式,每次程序运行追加(YLog::ADD)或覆盖(YLog::OVER)之前的日志文件。 写日志的函数为 template<typename T> \
void w(const std::string &codefile, const int codeline, \
const int level, const std::string &info, const T &value);
codefile:固定使用__FILE__宏表示哪个程序文件输出的日志。
codeline:固定使用__LINE__宏表示文件中哪一行代码输出的日志。
level:本条信息的级别。(仅当达到下限时才会写入文件)
info:string类型的任意信息。
value:想写入日志的任意类型的变量的值。(请确保此类型变量重载了'<<'操作符) */
#include <iostream>
#include <string>
#include "YLog.h"
int main(){
//创建日志对象log1,如果文件存在则追加,日志输出下限级别为INFO级别
YLog log1(YLog::INFO, "log1.txt", YLog::ADD);
//创建日志对象log2,如果文件存在则覆盖,日志输出下限级别为ERROR级别
YLog log2(YLog::ERROR, "log2.txt", YLog::OVER);
int a = ;
double b = 13.14;
std::string c = "I love U."; log1.w(__FILE__, __LINE__, YLog::INFO, "watch_a",a);//INFO级别不低于log1的下限INFO级别,正常写入日志文件
log1.w(__FILE__, __LINE__, YLog::ERROR, "Watch_b",b);//正常写入
log1.w(__FILE__, __LINE__, YLog::INFO, "watch_c",c);//正常写入 log2.w(__FILE__, __LINE__, YLog::INFO, "watch_a",a);//INFO级别低于log2的下限ERROR级别,不写入日志
log2.w(__FILE__, __LINE__, YLog::ERROR, "Watch_b",b);//正常写入
log2.w(__FILE__, __LINE__, YLog::INFO, "watch_c",c);//不写入日志
return ;
}
【输出日志1:log1.txt】

【输出日志2:log2.txt】

【附:旧版(仅支持windows,实现了可变参数)下载链接http://download.csdn.net/detail/yws_swy/9886382】
【新版本代码链接https://github.com/ywsswy/YLog】
自己编写的 C++ 超轻量级日志类的更多相关文章
- 分享自己的超轻量级高性能ORM数据访问框架Deft
Deft 简介 Deft是一个超轻量级高性能O/R mapping数据访问框架,简单易用,几分钟即可上手. Deft包含如下但不限于此的特点: 1.按照Transact-SQL的语法语义风格来设计,只 ...
- 超轻量级高性能ORM数据访问组件Deft,比dapper快20%以上
超轻量级高性能ORM数据访问组件Deft,比dapper快20%以上 阅读目录 Deft简介 Deft 核心类介绍 Deft 3分钟即可上手使用 其他可选的配置参数 性能测试 Demo代码下载 回到顶 ...
- 基于Groovy+HttpRestful的超轻量级的接口测试用例配置的设计方案及DEMO实现
目标 设计一个轻量级测试用例框架,接口测试编写者只需要编写测试用例相关的内容(入参及结果校验),不需要理会系统的实现,不需要写跟测试校验无关的内容. 思路 测试用例分析 一个用例由以下部分组成: (1 ...
- 基于领域驱动设计(DDD)超轻量级快速开发架构
smartadmin.core.urf 这个项目是基于asp.net core 3.1(最新)基础上参照领域驱动设计(DDD)的理念,并参考目前最为了流行的abp架构开发的一套轻量级的快速开发web ...
- 支持异步写入的日志类,支持Framework2.0
因为工作需要需要在XP上运行一个C#编写的Winform插件,我就用Framework2.0,因为存在接口交互所以想保留交易过程的入参出参. 考虑到插件本身实施的因素,就没有使用Log4.NLog等成 ...
- 【等待事件】等待事件系列(3+4)--System IO(控制文件)+日志类等待
[等待事件]等待事件系列(3+4)--System IO(控制文件)+日志类等待 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可 ...
- 超轻量级网络SqueezeNet网络解读
SqueezeNet网络模型非常小,但分类精度接近AlexNet. 这里复习一下卷积层参数的计算 输入通道ci,核尺寸k,输出通道co,参数个数为: 以AlexNet第一个卷积为例,参数量达到:3*1 ...
- muduo网络库源码学习————日志类封装
muduo库里面的日志使方法如下 这里定义了一个宏 #define LOG_INFO if (muduo::Logger::logLevel() <= muduo::Logger::INFO) ...
- [C#] 日志类
在程序发布到服务器上的时候,不能在像本地执行一样可以调试,在发生错误时候,往往不能很方便的查找错误.将错误信息写入文件是一种比较常用的处理方法.以下是一个日志类,实现以下功能: 1)按日期每天生产不同 ...
随机推荐
- 非阻塞式线程安全列表-ConcurrentLinkedDeque
一.ConcurrentLinkedDeque public class ConcurrentLinkedDeque<E> extends AbstractCollection<E& ...
- Fail-Fast机制详解
Java中的Iterator非常方便地为所有的数据源提供了一个统一的数据读取(删除)的接口,但是在使用的时候容易报如下错误ConcurrentModificationException,原因是在使用迭 ...
- Linux 下安装RabbitMQ 3.6.1
1.安装erlang 依赖 yum install -y gcc gcc-c++ unixODBC-devel openssl-devel ncurses-devel 2.安装erlang ### 设 ...
- Intellij Shortcuts
ctrl+shift+F : search in whole project ctrl+hover : check the field info in brief ctrl+Q : check the ...
- SpringMVC 3.2集成Spring Security 3.2
参考:http://www.cnblogs.com/Beyond-bit/p/springmvc_and_springsecurity.html SpringMVC 3.2集成Spring Secur ...
- struts2.1.6教程十、类型转换
建立struts2conversion项目,并搭建好struts2的基本开发环境 1.基于Action的直接属性转换 建立t.jsp页面,内容如下: <s:form action="p ...
- 基于dubbo的SSM(Spring,SpringMvc,Mybatis)整合的Maven多工程(下)
上篇是SSM的maven单工程(http://www.cnblogs.com/yuanjava/p/6748956.html).中篇是 SSM的maven多工程(http://www.cnblogs. ...
- Tips_of_JS 之 利用JS实现水仙花数的寻找与实现斐波那契数列
一.水仙花数 1.啥是水仙花数? 水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153) 2.利用JS实现对水 ...
- Predix Asset Service深度分析
前言 在IIOT领域,面临着保存海量数据的挑战,具体到Asset层面,则要保存物理对象,逻辑对象,复杂的关系,并支持对象间的组合,分类,标签和高效查询.总结来说,可以归纳为如下几种需求: 灵活的建 ...
- 网络编程应用:基于UDP协议【实现文件下载】--练习
要求: 基于UDP协议实现文件下载 发送方–请求–接收方发送文件–发送方接收文件 代码: 发送方: package Homework1; import java.io.File; import jav ...