取自: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

 // LogFile.cpp: implementation of the CLogFile class.
//
// A small class which can be used for debug logs.
//
////////////////////////////////////////////////////////////////////// #include "stdafx.h"
#include "LogFile.h" #ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif //////////////////////////////////////////////////////////////////////
// Construction/Destruction
////////////////////////////////////////////////////////////////////// CLogFile::CLogFile()
{
} CLogFile::CLogFile(LPCTSTR Filename)
{
SetFilename( Filename );
} CLogFile::~CLogFile()
{
} //////////////////////////////////////////////////////////////////////
// Methods
////////////////////////////////////////////////////////////////////// RETCODE CLogFile::Create(LPCTSTR Filename, LPCTSTR Text)
{
ASSERT( Filename );
ASSERT( Text );
m_Filename = Filename;
ASSERT( !m_Filename.IsEmpty() );
if( m_Filename.IsEmpty() ) return RET_INVALIDARGS;
// Write text to (text)file
CStdioFile f;
TRY
{
BOOL res = f.Open( Filename, CFile::modeCreate|CFile::modeWrite|CFile::typeText );
if( res ) {
f.WriteString( Text );
f.WriteString( _T("\n") );
f.Close();
};
}
CATCH_ALL(e)
{
f.Abort();
#ifdef _DEBUG
e->ReportError();
#endif
return RET_ERROR;
}
END_CATCH_ALL;
return RET_OK;
}; RETCODE CLogFile::AppendText(LPCTSTR Text, ...)
{
ASSERT(AfxIsValidString(Text));
ASSERT(!m_Filename.IsEmpty());
if( m_Filename.IsEmpty() ) return RET_NOTINITIALIZED;
// Append text to (text)file
CStdioFile f;
CString sText;
va_list args;
va_start(args, Text);
sText.FormatV(Text, args);
TRY
{
BOOL res = f.Open( m_Filename, CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite|CFile::typeText );
if( res ) {
f.SeekToEnd();
f.WriteString( sText );
f.WriteString( _T("\n") );
f.Close();
};
}
CATCH_ALL(e)
{
f.Abort();
#ifdef _DEBUG
e->ReportError();
#endif
return RET_FILEERROR;
}
END_CATCH_ALL;
return RET_OK;
}; RETCODE CLogFile::SetFilename(LPCTSTR Filename)
// Sets the log filename. A new log file will
// be created if the file does not exist.
{
ASSERT(AfxIsValidString(Filename));
m_Filename = Filename;
if( m_Filename.IsEmpty() ) return RET_INVALIDARGS;
return RET_OK;
} RETCODE CLogFile::LogSystemInformation()
// Write some standard system information to
// the log file.
{
ASSERT(!m_Filename.IsEmpty());
if( m_Filename.IsEmpty() ) return RET_NOTINITIALIZED; SYSTEMTIME time;
::GetLocalTime( &time );
AppendText(_T("Date: %04d-%02d-%02d Time: %02d:%02d:%02d"),
time.wYear,time.wMonth,time.wDay,time.wHour,time.wMinute,time.wSecond); OSVERSIONINFO verinfo;
verinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
::GetVersionEx(&verinfo);
AppendText(_T("Win%s Version %d.%.2d (build %d) %s\n"),
(verinfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? _T("NT") : _T("")),
verinfo.dwMajorVersion,
verinfo.dwMinorVersion,
verinfo.dwBuildNumber,
verinfo.szCSDVersion); SYSTEM_INFO sysinfo;
LPCTSTR pszProcessor;
::GetSystemInfo(&sysinfo);
switch( sysinfo.dwProcessorType ) {
case PROCESSOR_INTEL_386:
case PROCESSOR_INTEL_486:
case PROCESSOR_INTEL_PENTIUM:
pszProcessor = _T("Intel ");
break;
case PROCESSOR_MIPS_R4000:
pszProcessor = _T("MIPS R");
break;
case PROCESSOR_ALPHA_21064:
pszProcessor = _T("DEC Alpha ");
break;
default:
pszProcessor = _T("Chipset ");
break;
}
return AppendText(_T("%s%d, %d Processor(s)\n"),
(LPCTSTR)pszProcessor,
sysinfo.dwProcessorType,
sysinfo.dwNumberOfProcessors);
};

C++记录debug信息的log类的更多相关文章

  1. 【技巧】Java工程中的Debug信息分级输出接口

    也许本文的标题你们没咋看懂.但是,本文将带大家领略输出调试的威力. 灵感来源 说到灵感,其实是源于笔者在修复服务器的ssh故障时的一个发现. 这个学期初,同袍(容我来一波广告产品页面,同袍官网)原服务 ...

  2. 【技巧】Java工程中的Debug信息分级输出接口及部署模式

    也许本文的标题你们没咋看懂.但是,本文将带大家领略输出调试的威力. 灵感来源 说到灵感,其实是源于笔者在修复服务器的ssh故障时的一个发现. 这个学期初,同袍(容我来一波广告产品页面,同袍官网)原服务 ...

  3. 谁记录了mysql error log中的超长信息

    [问题] 最近查看MySQL的error log文件时,发现有很多服务器的文件中有大量的如下日志,内容很长(大小在200K左右),从记录的内容看,并没有明显的异常信息. 有一台测试服务器也有类似的问题 ...

  4. 谁记录了mysql error log中的超长信息(记pt-stalk一个bug的定位过程)

    [问题] 最近查看MySQL的error log文件时,发现有很多服务器的文件中有大量的如下日志,内容很长(大小在200K左右),从记录的内容看,并没有明显的异常信息. 有一台测试服务器也有类似的问题 ...

  5. CentOS下查看最后登录的用户信息以及LOG记录

    CentOS下查看最后登录的用户信息tail /var/log/messagestail /var/log/secure 我们知道,在redhat下可以用lastlog查看各用户最后登录的信息,用la ...

  6. Android学习笔记Log类输出日志信息

    Log类提供的方法 代码示例 .. Log.e(TAG,"[错误信息]"); Log.w(TAG,"[警告信息]"); Log.i(TAG,"[普通信 ...

  7. .net 创建属于自己的log类

    实习到现在已经接近三个月了,由于是校企联合培养计划,所以没有工资,所幸公司对于我们这些实习生并没有什么要求,刚开始我还觉得要做点什么才能学得快,可是到了后来,发现公司安排给我们的任务并不紧要,也不算太 ...

  8. Log4Net在MVC下的配置以及运用线程队列记录异常信息

    Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过日志查看系统的运行过程,从而发现系统的问题.日志的作用:将运 ...

  9. VC++ 一个简单的Log类

    在软件开发中,为程序建立Log日志是很必要的,它可以记录程序运行的状态以及出错信息,方便维护和调试. 下面实现了一个简单的Log类,使用非常简单,仅供参考. // CLogHelper.h : hea ...

随机推荐

  1. Linux命令(16)压缩,解压文件

    tar: 简介:tar命令只是把目录打包成一个归档(文件),并不负责压缩.在tar命令中可以带参数调用gzip或bzip2压缩.因为gzip和bzip2只能压缩单个文件. 在linux下是不需要后缀名 ...

  2. CLR via C#笔记

    第一部分 CLR基础 CLR和JIT “运行时”如何解析类型引用 第二部分 设计类型 使用C#的is和as操作符来转型 运行时的相互联系 基元类型.引用类型和值类型 值类型的装箱和拆箱 哈希码 dyn ...

  3. JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用。

    在把jdk安装到计算机中之后,我们来进行设置使java环境能够使用. 首先右键点我的电脑.打开属性.然后选择“高级”里面的“环境变量”,在新的打开界面中的系统变量需要设置三个属性“JAVA_HOME” ...

  4. 保持UIImagePickerController后导航栏风格统一

    1. UIImagePickerController 状态栏始终保持某一种风格. -(void)navigationController:(UINavigationController *)navig ...

  5. springmvc 中RequestMapping注解的使用

    1.RequestMapping注解既可以修饰方法,又可以修饰类型,类型指定的url相对于web跟路径,而方法修饰的url相对于类url: 2.RequestMapping的几个属性: value:用 ...

  6. [Java] 读写字节数据,过滤流DataOutputStream和DataInputStream

    package test.stream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io ...

  7. java -d64

    在 resin启动时指定java时加上了 -d64选项 JAVA="/xx/java -d64" 选择 "-server"选项必须使用-d64 http://b ...

  8. gRPC 的 RoadMap 20160325 更新

    gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发 ...

  9. [SQL] 如何在SQL Server2005数据库中检查一个表是否存在,如存在就删除表记录,如不存在就建表.

    . 检索 dbo.sysobjects表, select count(*) from dbo.sysobjects where xtype='U' and Name = '你的表名' . 根据返回的结 ...

  10. [ZOJ 1009] Enigma (模拟)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1009 题目大意:给你三个转换轮,只有当第一个转换轮转动一圈后第二 ...