zoukankan      html  css  js  c++  java
  • C++记录debug信息的log类

    取自:http://www.viksoe.dk/code/all_mfc.htm,里面有各种MFC常用的类

    // LogFile.h: interface for the CLogFile class.
    //
    // Written by Bjarke Viksoe (bjarke@viksoe.dk)
    // Copyright (c) 2000.
    //
    // This code may be used in compiled form in any way you desire. This
    // file may be redistributed by any means PROVIDING it is 
    // not sold for profit without the authors written consent, and 
    // providing that this notice and the authors name is included. 
    //
    // This file is provided "as is" with no expressed or implied warranty.
    // The author accepts no liability if it causes any damage to you or your
    // computer whatsoever. It's free, so don't hassle me about it.
    //
    // Beware of bugs.
    ////////////////////////////////////////////////////////////////////////
    
    #if !defined(AFX_LOGFILE_H__0EE45201_E8F9_11D1_93C1_241C08C10000__INCLUDED_)
    #define AFX_LOGFILE_H__0EE45201_E8F9_11D1_93C1_241C08C10000__INCLUDED_
    
    #if _MSC_VER >= 1000
    #pragma once
    #endif // _MSC_VER >= 1000
    
    // A small class implementing a debug log file.
    class CLogFile : public CObject  
    {
    public:
       CLogFile();
       CLogFile(LPCTSTR Filename);
       virtual ~CLogFile();
    
    // Methods
    public:
       // Creates (removes previous) log file.
       RETCODE Create(LPCTSTR Filename, LPCTSTR Text);
       // Set the filename of the log fil to use.
       RETCODE SetFilename(LPCTSTR Filename);
       // Creates or appends to an exisiting log file.
       RETCODE AppendText(LPCTSTR Text, ...);
       // Writes System Information to the log
       RETCODE LogSystemInformation();
    
    // Variables
    protected:
       CString m_Filename;     // The log file we're currently writing to.
    };
    
    #endif // !defined(AFX_LOGFILE_H__0EE45201_E8F9_11D1_93C1_241C08C10000__INCLUDED_)

    LogFile.cpp

      1 // LogFile.cpp: implementation of the CLogFile class.
      2 //
      3 // A small class which can be used for debug logs.
      4 //
      5 //////////////////////////////////////////////////////////////////////
      6 
      7 #include "stdafx.h"
      8 #include "LogFile.h"
      9 
     10 #ifdef _DEBUG
     11 #undef THIS_FILE
     12 static char THIS_FILE[]=__FILE__;
     13 #define new DEBUG_NEW
     14 #endif
     15 
     16 //////////////////////////////////////////////////////////////////////
     17 // Construction/Destruction
     18 //////////////////////////////////////////////////////////////////////
     19 
     20 CLogFile::CLogFile()
     21 {
     22 }
     23 
     24 CLogFile::CLogFile(LPCTSTR Filename)
     25 {
     26    SetFilename( Filename );
     27 }
     28 
     29 CLogFile::~CLogFile()
     30 {
     31 }
     32 
     33 
     34 //////////////////////////////////////////////////////////////////////
     35 // Methods
     36 //////////////////////////////////////////////////////////////////////
     37 
     38 RETCODE CLogFile::Create(LPCTSTR Filename, LPCTSTR Text)
     39 {
     40    ASSERT( Filename );
     41    ASSERT( Text );
     42    m_Filename = Filename;
     43    ASSERT( !m_Filename.IsEmpty() );
     44    if( m_Filename.IsEmpty() ) return RET_INVALIDARGS;
     45    // Write text to (text)file
     46    CStdioFile f;
     47    TRY 
     48    {
     49       BOOL res = f.Open( Filename, CFile::modeCreate|CFile::modeWrite|CFile::typeText );
     50       if( res ) {
     51          f.WriteString( Text );
     52          f.WriteString( _T("
    ") );
     53          f.Close();
     54       };
     55    }
     56    CATCH_ALL(e) 
     57    {
     58       f.Abort();
     59 #ifdef _DEBUG
     60       e->ReportError();
     61 #endif
     62       return RET_ERROR;
     63    }
     64    END_CATCH_ALL;
     65    return RET_OK;
     66 };
     67 
     68 RETCODE CLogFile::AppendText(LPCTSTR Text, ...)
     69 {
     70    ASSERT(AfxIsValidString(Text));
     71    ASSERT(!m_Filename.IsEmpty());
     72    if( m_Filename.IsEmpty() ) return RET_NOTINITIALIZED;
     73    // Append text to (text)file
     74    CStdioFile f;
     75    CString sText;
     76    va_list args;   
     77    va_start(args, Text);   
     78    sText.FormatV(Text, args);
     79    TRY 
     80    {
     81       BOOL res = f.Open( m_Filename, CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite|CFile::typeText );
     82       if( res ) {
     83          f.SeekToEnd();
     84          f.WriteString( sText );
     85          f.WriteString( _T("
    ") );
     86          f.Close();
     87       };
     88    }
     89    CATCH_ALL(e) 
     90    {
     91       f.Abort();
     92 #ifdef _DEBUG
     93       e->ReportError();
     94 #endif
     95       return RET_FILEERROR;
     96    }
     97    END_CATCH_ALL;
     98    return RET_OK;
     99 };
    100 
    101 RETCODE CLogFile::SetFilename(LPCTSTR Filename)
    102 // Sets the log filename.  A new log file will
    103 // be created if the file does not exist.
    104 {
    105    ASSERT(AfxIsValidString(Filename));
    106    m_Filename = Filename;
    107    if( m_Filename.IsEmpty() ) return RET_INVALIDARGS;
    108    return RET_OK;
    109 }
    110 
    111 RETCODE CLogFile::LogSystemInformation()
    112 // Write some standard system information to
    113 // the log file.
    114 {
    115    ASSERT(!m_Filename.IsEmpty());
    116    if( m_Filename.IsEmpty() ) return RET_NOTINITIALIZED;
    117 
    118    SYSTEMTIME time;
    119    ::GetLocalTime( &time );
    120    AppendText(_T("Date: %04d-%02d-%02d Time: %02d:%02d:%02d"),
    121               time.wYear,time.wMonth,time.wDay,time.wHour,time.wMinute,time.wSecond);
    122 
    123    OSVERSIONINFO verinfo;
    124    verinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    125    ::GetVersionEx(&verinfo);
    126    AppendText(_T("Win%s Version %d.%.2d (build %d) %s
    "), 
    127       (verinfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? _T("NT") : _T("32")),
    128       verinfo.dwMajorVersion,
    129       verinfo.dwMinorVersion,
    130       verinfo.dwBuildNumber,
    131       verinfo.szCSDVersion);
    132   
    133    SYSTEM_INFO sysinfo; 
    134    LPCTSTR pszProcessor; 
    135    ::GetSystemInfo(&sysinfo); 
    136    switch( sysinfo.dwProcessorType ) { 
    137    case PROCESSOR_INTEL_386: 
    138    case PROCESSOR_INTEL_486: 
    139    case PROCESSOR_INTEL_PENTIUM: 
    140       pszProcessor = _T("Intel "); 
    141       break; 
    142    case PROCESSOR_MIPS_R4000: 
    143       pszProcessor = _T("MIPS R"); 
    144       break; 
    145    case PROCESSOR_ALPHA_21064: 
    146       pszProcessor = _T("DEC Alpha "); 
    147       break; 
    148    default: 
    149       pszProcessor = _T("Chipset "); 
    150       break; 
    151    } 
    152    return AppendText(_T("%s%d, %d Processor(s)
    "), 
    153       (LPCTSTR)pszProcessor, 
    154       sysinfo.dwProcessorType, 
    155       sysinfo.dwNumberOfProcessors);
    156 };
  • 相关阅读:
    @babel/preset-env 解决Promise被Babel编译成regenerator 运行时错误问题
    Blob ArrayBuffer 和 BinaryString StringView
    TypeScript 的尴尬:模块不如wepback完善
    Node.js(1) http和https模块发送HTTP(S)请求
    axios
    Nest.js 再探 解析HTTP请求
    红楼梦题词
    倾斜摄影
    重新认识TypeScript
    TypeScript 家族
  • 原文地址:https://www.cnblogs.com/kernel0815/p/3619000.html
Copyright © 2011-2022 走看看