最近一直在忙实验室的项目开发,很少上博客了,现在总算有一定时间空出来做些总结,今天起陆续更新博客,总结一下半年多来的学习心得。
今天先分享一个简易的程序日志记录类,参考自《一个简单又高效的日志系统》,针对项目本身做了一定的修改和补充,编程水平有限,仅供参考,呵呵 。
头文件:
#ifndef _INFO_LOGGER_H_
#define _INFO_LOGGER_H_
/********************************************************************
* created: 8/7/2012 13:41
* filename: CinfoLogger.h
* author: ZouYuhua @ BUAA
*
* purpose: 这是一个简易的程序运行日志记录类
* 主要功能是
* 1. 将带参数的格式化字符串写入日志缓存字符串
* 2. 当缓存字符串长度大于阈值 或者 定时时间到 时,将缓存写入到本地log文件
* 3. 将带参数的格式化字符串转换为 std::string 字符串
* 4. 将当前系统时间转换为指定格式的字符串
* 5. 获取高精度(微秒级)的系统时间
*
* sample: 使用示例
*
* // 包含头文件,可以放在 stdafx.h 中
*
* #include "CinfoLogger.h"
* #define WRITE_LOG CinfoLogger::instance()->LogInfo
* #define STRING_FORMAT CinfoLogger::instance()->LogInfo
* #define ENTER_FUNC CinfoLogger::instance()->EnterFunction
* #define LEAVE_FUNC CinfoLogger::instance()->LeaveFunction
* #define GET_TIME_STRING CinfoLogger::instance()->GetCurTimeToString
* #define GET_TIME_ELAPSED CinfoLogger::instance()->GetTimeElapsed
* #define GET_TIME_NOW CinfoLogger::instance()->GetSystemTimerCount()
* #define LOG_LEVEL_FORMAT -1
* #define LOG_LEVEL_MAIN 0
* #define LOG_LEVEL_SUB_1 1
* #define LOG_LEVEL_SUB_2 2
* #define LOG_LEVEL_SUB_3 3
*
* //具体调用方式
*
* //1.写入日志
* WRITE_LOG(LOG_LEVEL_MAIN, "正在获取数据。");
* WRITE_LOG(LOG_LEVEL_SUB_1, "The value is %d", value);
* cout << WRITE_LOG(LOG_LEVEL_MAIN, "写入日志缓存,并在控制台窗口显示信息。") << endl;
*
* //2.格式化字符串转换
* std::string info = "The ";
* info += STRING_FORMAT(LOG_LEVEL_FORMAT, "value is %d", value);
*
* //3.将当前时间转换为字符串,作为文件名的一部分
* std::string imgFileName = "img_" + GET_TIME_STRING() + ".jpg";
*
* //4.程序运行时间计时
* LONGLONG t_start = GET_TIME_NOW;
* // do something ...
* double t_elapsed = GET_TIME_ELAPSED( t_start );
* WRITE_LOG(LOG_LEVEL_MAIN, "[Main Process] 用时: %.3f ms", t_elapsed);
*
* //5.记录函数进出事件
* function func
* {
* ENTER_FUNC("func");
* ...
* LEAVE_FUNC("func");
* }
********************************************************************/
#pragma once
//-------------------------------------------------------------------------
// Includes
//-------------------------------------------------------------------------
/***
* 在 stdafx.h 还包含了其它的头文件,也可能在本类中用到
*
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: 在此处引用程序需要的其他头文件
#include <Windows.h>
#include <iostream>
#include <vector>
#include