zoukankan      html  css  js  c++  java
  • 一个简单的c++写日志类

    在开发当中有的直接调试很方便,有的就不太好调试,所以我经常使用写日志以及输出Debug信息来进行开发。尽管我比较喜欢使用以输出Debug的信息的方式来跟踪程序。因为直接一句话:

    OutputDebugString("你想输出的信息\r\n");
    

     就可以在非调试模式下直接在DebugView上面显示输出信息了。

    但是除了这种方式之外有时侯我也会使用写日志的方式来输出调试信息,虽然写文件很简单,但还是记录一下吧。方便自己同时也可能方便需要的人吧。

    首先是main()函数定义:

     1 #include "RcLogInfo.h"
     2 
     3 int main(void)
     4 {
     5     //////////////////////////////////////////////////////////////////////////
     6     char cPath[MAX_PATH];
     7     memset(cPath,0,MAX_PATH);
     8     if (!GetModuleFileName(NULL,cPath,MAX_PATH))
     9     {
    10         return false;
    11     }
    12     char *FileName = cPath + strlen(cPath)-1;
    13     while(*FileName !='\\')
    14     {
    15         --FileName;
    16     }
    17     *FileName = '\0';
    18     char cFileName[MAX_PATH]={'\0'};
    19     sprintf(cFileName,"%s\\%s",cPath,"TestLog.log");
    20 
    21 
    22     //////////////////////////////////////////////////////////////////////////
    23     FILE *m_pfLogFile=NULL;
    24     if(NULL != m_pfLogFile)
    25     {
    26         fclose(m_pfLogFile);
    27     }
    28     m_pfLogFile = fopen(cFileName,"at+");
    29     if(NULL == m_pfLogFile)
    30     {
    31         return 1;
    32     }
    33 
    34 
    35     //////////////////////////////////////////////////////////////////////////
    36     RcLogInfo rl;
    37     rl.SetLogFile(m_pfLogFile);
    38 
    39 
    40     //////////////////////////////////////////////////////////////////////////
    41     timeb aTime;
    42     ftime(&aTime);
    43     sprintf(rl.m_cInfo,"写日志测试******************************+++++++++++++++++++++++_________________%s .%ld ms\n",ctime(&(aTime.time)),aTime.millitm);
    44     rl.WriteLogInfo(rl.m_cInfo);
    45 
    46 
    47     return 0;
    48 
    49 
    50 }

    下面是一个写日志类实现:

    /*
    *	写日志类
    *
    */
    #pragma once
    
    #include <windows.h>
    #include <atltime.h>
    #include <sys/timeb.h>
    #include <iostream>
    using namespace std;
    
    class RcLogInfo
    {
    public:
    	RcLogInfo(void);
    	~RcLogInfo(void);
    
    public:
    	//日志文件
    	FILE* m_pfLogFile;
    	char m_cInfo[255];
    
    	int  SetLogFile(FILE *pfLogFile);
    	int  WriteLogInfo(const char *pInfo);
    };
    

     cpp文件:

     1 #include "RcLogInfo.h"
     2 
     3 RcLogInfo::RcLogInfo(void)
     4 {
     5     m_pfLogFile = NULL;
     6     memset(m_cInfo,NULL,sizeof(m_cInfo));
     7 }
     8 
     9 RcLogInfo::~RcLogInfo(void)
    10 {
    11     if (NULL != m_pfLogFile)
    12     {
    13         fclose(m_pfLogFile);
    14         m_pfLogFile = NULL;
    15     }
    16 }
    17 
    18 int RcLogInfo::SetLogFile(FILE *pfLogFile)
    19 {
    20     m_pfLogFile=pfLogFile;    
    21     return 0;
    22 }
    23 
    24 int RcLogInfo::WriteLogInfo(const char *pInfo)
    25 {
    26     if(NULL != m_pfLogFile)
    27     {
    28         fprintf(m_pfLogFile,"%s",pInfo);
    29         fflush(m_pfLogFile);
    30         return 0;
    31     }
    32     return 1;
    33 
    34     
    35 }

    结束~~~

  • 相关阅读:
    (zhuan) Paper Collection of Multi-Agent Reinforcement Learning (MARL)
    SalGAN: Visual saliency prediction with generative adversarial networks
    百善孝为先
    现代人为这个世界留下了什么?
    如人饮水,冷暖自知。
    移动端tap与click的区别 && 点透事件
    渐进增强与优雅降级 && css3中普通属性和前缀属性的书写顺序
    JavaScript中的垃圾回收机制与内存泄露
    http2.0之头部压缩
    状态码301和302的区别
  • 原文地址:https://www.cnblogs.com/wainiwann/p/2882308.html
Copyright © 2011-2022 走看看