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 }

    结束~~~

  • 相关阅读:
    Cleaning Up Children Asynchronously
    advacing lnux program 4.1.5 Thread Attributes[copy]
    advacing lnux program Threads Return Value[copy]
    批处理,所有子文件夹下面的所有文件
    .NET连接sybase乱码问题
    Asp.net forms认证遇到的一个奇怪的问题和测试过程
    WCF错误
    wcf超时错误
    gridControl控件显示交叉表
    K3 12.1修改报表Bug
  • 原文地址:https://www.cnblogs.com/wainiwann/p/2882308.html
Copyright © 2011-2022 走看看