C++实现Log()日志函数
转载请注明原创:http://www.cnblogs.com/StartoverX/p/4600649.html
需求:Log()函数,能够自动根据时间记录日志信息,要求不定参数类型和参数个数。
第一步,得到日志时间:
get_data() 和get_time()分别得到当前日期和时间。
#include <ctime>
static std::string get_data()
{
time_t t = time();
struct tm *now = localtime(&t);
std::stringstream ss;
ss<<now->tm_year+<<'_'
<<now->tm_mon+<<"_"
<<now->tm_mday;
return ss.str();
}
static std::string get_time()
{
time_t t = time();
struct tm* now = localtime(&t);
std::stringstream ss;
ss<<get_data()<<' ';
ss<<now->tm_hour<<':'
<<now->tm_min<<':'
<<now->tm_sec;
return ss.str();
}
2.to_string()
C++中,我们使用可变参数模板实现不定参数。
首先实现to_string()参数将Log()中的参数全部传递至streamstring。to_string()通过递归的方式实现。
#include <string>
#include <sstream>
template <typename T>
static int to_string(std::stringstream& ss,const T &t)
{
ss<<t;
;
}
template <typename T,typename...Args>
static int to_string(std::stringstream& ss,const T &t,const Args&...rest)
{
ss<<t;
return to_string(ss,rest...);
}
3.Log()
最后Log()调用上面三个函数,get_data()得到当天的时间找到对应的日志文件,to_string()将日志内容和get_time()时间结合后输入到日志文件中。
template <typename T,typename...Args>
static int Log(const T &t,const Args&...rest)
{
std::stringstream ss;
to_string(ss,t,rest...);
std::string path = LOG_PATH;
path +=get_data(); //日志名字为当天时间
std::fstream log_file;
log_file.open(path,std::ios::out|std::ios::app);
log_file<<"["<<get_time()<<"]"<<ss.str()<<std::endl;
log_file.close();
std::cerr<<ss.str()<<std::endl;
}
C++实现Log()日志函数的更多相关文章
- LR中日志设置和日志函数
LR中日志参数的设置与使用 1.Run-Time Setting日志参数的设置 在loadrunner的vuser菜单下的Run-Time Setting的General的LOG选项中可以对在执行脚本 ...
- winfrom存储txt日志函数
参考微信支付SDK的代码,抽取出来的winform存储记事本日志函数: #region 存储日志 public string path = Application.StartupPath + &quo ...
- log4j.properties配置与将异常输出到Log日志文件实例
将异常输出到 log日志文件 实际项目中的使用: <dependencies> <dependency> <groupId>org.slf4j</groupI ...
- C/C++log日志库比较
事实上,在C的世界里面没有特别好的日志函数库(就像Java里面的的log4j,或者C++的log4cxx).C程序员都喜欢用自己的轮子.printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者 ...
- 使用mapreduce来分析网站的log日志
近日,有人和我说分析log日志. 之前,就写过,但是忘了总结了,找了半天也没有找到,看了以后要将东西整理了. 无奈,在网上收拾,看到这个人写的,索性,就搬过来,待我找到我写的,在一块补充一下! 所有网 ...
- Python + logging 输出到屏幕,将log日志写入文件
日志 日志是跟踪软件运行时所发生的事件的一种方法.软件开发者在代码中调用日志函数,表明发生了特定的事件.事件由描述性消息描述,该描述性消息可以可选地包含可变数据(即,对于事件的每次出现都潜在地不同的数 ...
- Log 日志工具类 保存到文件 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- php日志函数error_log
php内置打印log日志的函数,这个对php程序调试非常高效 1.配置 编辑php.ini文件 log_errors = On 设置log日志存储路径 error_log = /wwwroot/php ...
- (转)DB2 db2diag.log 日志分析
DB2 db2diag.log 日志分析 原文:http://blog.csdn.net/lyjiau/article/details/52129997 db2diag.log是用来记录DB2数据库运 ...
随机推荐
- 源代码管理工具TFS2013安装与使用
最近公司新开发一个项目要用微软的TFS2013进行项目的源代码管理,以前只是用过SVN,从来没有用过TFS,所以在网上百度.谷歌了好一阵子来查看怎么安装和配置,还好花了一天时间总算是初步的搞定了,下面 ...
- 01背包之求第K优解——Bone Collector II
http://acm.hdu.edu.cn/showproblem.php?pid=2639 题目大意是,往背包里赛骨头,求第K优解,在普通01背包的基础上,增加一维空间,那么F[i,v,k]可以理解 ...
- iOS面试贴士
iOS面试小贴士 ———————————————回答好下面的足够了------------------------------------- 多线程.特别是NSOperation 和 GCD 的内部原 ...
- C++编写ATM(2)
//上一个程序,密码不能被隐藏和该ATM可以让人取大于余额的乐币,这可定不行的.所以再次改了下,解决这两个问题. // ATM的初始.cpp : 定义控制台应用程序的入口点. // /******** ...
- js用for循环为对象添加事件并传递参数
var objArr = getObjArr(id); for(var i=0; i<objArr.length; i++){ var param=objArr.param ad ...
- RMAN-00554: initialization of internal recovery manager package failed RMAN-04005
[oracle@rac11g1 ~]$ rman target haha/haha@rac11g Recovery Manager: Release 11.2.0.3.0 - Production o ...
- uva 12253 - Simple Encryption(dfs)
题目链接:uva 12253 - Simple Encryption 题目大意:给定K1.求一个12位的K2,使得KK21=K2%1012 解题思路:按位枚举,不且借用用高速幂取模推断结果. #inc ...
- 深入分析C++引用
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 关于引用和指针的差别的文章非常多非 ...
- linux下mysql5.5的安装
#rpm –qa|grep –i mysql查看已安装的mysql版本 如果有已存在的mysql版本则删除 安装服务端和客户端,去Oracle官网下载: # rpm -ivh MySQL-serve ...
- StarUML中时序图添加小人
转载于 http://blog.csdn.net/longyuhome/article/details/9011629 在看时序图的例子的时候,发现有些的时序图上有小人的图标,可是一些UML工具却没有 ...