我的CLog的实现

改编于一个老外的同名作品。

############  log.h #################

//===========================================================================
//
// HomeWork from Belgium   Not licensed software 
// 1999 - 2000      No rights reserved
//
//===========================================================================
//
// Project/Product : Iconizer DLL
//  FileName  : log.h
// Author(s)  : Bart Gysens
//
// Description  : Declaration of CLog class
//
// Classes   : CLog
//
// Information  :
//   Compiler(s) : Visual C++ 6.0
//   Target(s)  : Windows 95/98 and Windows NT (x86)
//   Editor  : Visual C++ 6.0 internal editor
//
// History
// Vers.  Date        Aut.  Type     Description
//  -----  ----------  ----  -------  -----------------------------------------
// 1.00   22 05 1999  BG    Create   Original
//  1.01   20 12 2000  hewen Add
//  1.03   24 10 2001  hewen Add
//  1.04   10 06 2003  hewen Add
//===========================================================================

#ifndef _LOG_H_INCLUDED__
#define _LOG_H_INCLUDED__

//===========================================================================
// Macros and typedefs
//===========================================================================


//===========================================================================
//
// Class   : CLog
// Author(s)  : Bart Gysens
//
// Description  : Declaration of the CLog class
//
// Comments  : none
//
// History   : 1.00  : Create
//                      1.01  : hewen Add
//                      1.03  : hewen Add
//                      1.04  : hewen Add
//===========================================================================

class CLog
{
 // Member functions
 public:
 CLog();

 public:
 static void PutLog( LPCTSTR pFmt, ... );
 
//1.01
 static void SetFile(LPCTSTR FileName);
//1.03
 static void Delete(void);
//1.04
 static void PutLogBinary(VOID *pMem,DWORD Length,BOOL bTxt);
 static void MessageBox( LPCTSTR pFmt, ... );


};

#endif // _LOG_H_INCLUDED__

 

############  log.cpp #################

//===========================================================================
//
// HomeWork from Belgium   Not licensed software 
// 1999 - 2000      No rights reserved
//
//===========================================================================
//
// Project/Product : Iconizer DLL
//  FileName  : log.cpp
// Author(s)  : Bart Gysens
//
// Description  : Declaration of CLog class
//
// Classes   : CLog
//
// Information  :
//   Compiler(s) : Visual C++ 6.0
//   Target(s)  : Windows 95/98 and Windows NT (x86)
//   Editor  : Visual C++ 6.0 internal editor
//
// History
// Vers.  Date        Aut.  Type     Description
//  -----  ----------  ----  -------  -----------------------------------------
// 1.00   22 05 1999  BG    Create   Original
//  1.01   20 12 2000  hewen Add
//  1.03   24 10 2001  hewen Add
//  1.04   16 06 2003  hewen Add      My BirthDay
//===========================================================================

#include "stdafx.h"
#include "stdio.h"
//1.01
#include "stdlib.h"
#include "log.h"

//===========================================================================
// Macros and typedefs
//===========================================================================

//===========================================================================
//
// Class   : CLog
// Author(s)  : Bart Gysens
//
// Description  : Declaration of the CLog class
//
// Comments  : none
//
// History   : 1.00  : Create
//                      1.01  : hewen Add
//                      1.03  : hewen Add
//                      1.04  : hewen Add
//===========================================================================

//1.01
static char gLogFileName[_MAX_PATH] = "LOG.TXT";

CLog::CLog()
{
}

void CLog::PutLog( LPCTSTR pFmt, ... )
{
//1.02
#ifdef _DEBUG_LOG

 FILE * pFile;
//1.01
 pFile = fopen( gLogFileName, "ab" );
//1.00
// pFile = fopen( "C://LOG.TXT", "a" );

 if ( pFile != NULL )
 {
  va_list arg;
  va_start( arg, pFmt );
  vfprintf( pFile, pFmt, arg );
  va_end( arg );
  fclose( pFile );
 }
#endif
}

//1.01
void CLog::SetFile(LPCTSTR FileName)
{
//1.02
#ifdef _DEBUG_LOG
 strncpy(gLogFileName,FileName,_MAX_PATH);
#endif
}

//1.03
void CLog::Delete(void)
{
#ifdef _DEBUG_LOG
 DeleteFile(gLogFileName);
#endif
}

//1.04
void CLog::PutLogBinary(VOID *pMem,DWORD Length,BOOL bTxt)
{
#ifdef _DEBUG_LOG
 FILE * pFile;
 int Row, r, i, j;

 if(pMem == NULL || Length <= 0)
  return;

 pFile = fopen( gLogFileName, "ab" );

 unsigned char *P = (unsigned char *)pMem;

 unsigned char txtBuff[16];

 if ( pFile != NULL )
 {
  if(!bTxt)
  {
   fwrite(P,Length,1,pFile);
  }
  else
  {
   Row = Length / 16;
   r   = Length % 16;

   for(i=0;i<Row;i++)
   {
    fprintf(pFile,"%04x:",i);
    for(j=0;j<16;j++)
    {
     fprintf(pFile,"%c%02X",(j == 8 ? '-' : ' '),*P);
     txtBuff[j] = isgraph(*P) ? *P : '.';
     P ++;
    }

    fprintf(pFile," | ");
    fwrite(txtBuff,16,1,pFile);
    fprintf(pFile,"/r/n");
   }

   fprintf(pFile,"%04x:",Row);
   for(i=0;i<16;i++)
   {
    if(i < r)
    {
     fprintf(pFile,"%c%02X",(j == 8 ? '-' : ' '),*P);
     txtBuff[j] = isgraph(*P) ? *P : '.';
    }
    else
    {
     fprintf(pFile,"   ");
     txtBuff[j] = ' ';
    }
    P ++;
   }

   fprintf(pFile," | ");
   fwrite(txtBuff,16,1,pFile);
   fprintf(pFile,"/r/n");
  }

  fprintf(pFile,"/r/n");
  fclose( pFile );
 }

#endif
}

//1.04
#include "windows.h"
void CLog::MessageBox( LPCTSTR pFmt, ... )
{
#ifdef _DEBUG_LOG
 char buff[1024];
 buff[0] = 0;
 va_list arg;
 va_start( arg, pFmt );
 vsprintf( buff, pFmt, arg );
 va_end( arg );
 AfxMessageBox(buff,MB_OK,0);
#endif
}

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

////////////////////////////////////////////README//////////////////////////////////////////////////// // DebugLog--write some log for debug // //初衷: 版本开发时候,有些功能点是可以项目无关,比如是解析某个文件;开发完成之后,测试话, // // 需要整改项目程序运行、测试,功能点触发条件比较麻烦。所以,有时候,对于这样功能点, // // 会选择进行本地开发,然后再合到项目中去. // // 但是,每次功能点开发时候,一般用是printf直接打屏,但是项目中用是写文件,所以移植 // // 时候还需要进行不少改动. // // 于是,就想自己写个log,可以与项目日志函数进行适配。那么,上面问题可以得到比较好 // // 解决(或者说是规避)。 // //附注:不知道这样做有没有意义,也就是根据自己经验,试着做了下。经验不足,水平有限,肯定会 // // 导致设计不足,不对,甚至是整个设计没有意义。如果是这样,希望能不吝交流、赐教. // // EMail: hu__haifeng@163.com // ////////////////////////////////////////////////////////////////////////////////////////////////////// //Version :0.5 // //Description:该版本打造了基本架构,并且实现了不带参数打印日志(仅仅是字符串),可以进行监督测试.// // 由于项目经验有限,仅仅见过两种不同项目日志分隔,所以也只能以此为参考,不一定可以 // // 适配其他项目日志函数. // //Adapter :可以用宏定义来进行适配。比如: // // #ifdef __CLOG_H__ // // #define DEBUG(VAR) mylog.Print(__FILE__, __LINE__, VAR, LOG_DEBUG) // // #else // // #define DEBUG(VAR) function //项目用标准日志函数. // // #endif // // // //Plan :1.0版本写成可以带参数日志。2.0版本实现客户端、服务器版本(可以支持不同进程写日志)。// //////////////////////////////////////////////////////////////////////////////////////////////////////
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值