MFC 产生log日志文件的问题

原创 2013年12月02日 14:36:46

使用技巧

#ifdef _SAVE_DEBUG_LOG_FILE

void log_debug(DWORD, LPCTSTR, LPCTSTR, INT );

#define LOG_DEBUG(x, y) do{ \
 log_debug( x, y, _T(__FUNCTION__), __LINE__);\
}while(0)

#else

#define LOG_DEBUG(x, y) do{ \
}while(0)
#endif

 

//枚举错误的级别

enum E_LOG_OUTPUT_TYPE
{
 E_LOGTYPE_FAILED  =-1,
 E_LOGTYPE_INFOMATION = 0,
 E_LOGTYPE_SUCCEEDED  =1
};

#define _SAVE_DEBUG_LOG_FILE

通过宏的定义去决定是否保存debug信息

#ifdef _SAVE_DEBUG_LOG_FILE

void log_debug(DWORD, LPCTSTR, LPCTSTR, INT );

#define LOG_DEBUG(x, y) do{ \
 log_debug( x, y, _T(__FUNCTION__), __LINE__);\
}while(0)

#else

#define LOG_DEBUG(x, y) do{ \
}while(0)
#endif

 

static void log_debug( DWORD dwErrorCode,LPCTSTR lpOutputString, LPCTSTR func, INT line )
{

#define MAX_PATH_SIZE(0x100) 

 static BOOL bInited =false;
 static CStdioFile log;

 if( false == bInited)
 {
  TCHARtcPath[MAX_PATH_SIZE];
  GetModuleFileName(NULL, tcPath,MAX_PATH_SIZE);//检索当前进程所执行的可执行文件的路径,就是获得当前可执行文件的路径

  CStringfilename(tcPath);
  CString  strLogName(tcPath);
  CString  strLogDir;
  INT index =filename.ReverseFind(_T('\\'));//返回的是该字符串所在的位置索引
  if( -1 != index )
  {
   INT len =filename.GetLength();
   ++index;
   filename.Delete(index,len - index);//这样就找到了可执行文件的名字了

   strLogDir= filename;
   strLogDir +=_T("Log\\");
   CreateDirectory(strLogDir,NULL);//成功的话返回值非零
   CStringstrTemp;
   strLogName.Delete(0,index);
   strTemp =strLogName.Mid(0,strLogName.ReverseFind(_T('.')));//返回值是整体到点结束的字符串
   time_tnowTime;
   time(&nowTime);//添加此时的秒数
   strLogName.Format(_T("Log\\RUN_%s_%d_LOG.txt"),strTemp, nowTime);//定义文件log的名称是。。。
  }

  
  
  filename +=strLogName;//文件名称的路径
  log.Open( filename,CFile::modeCreate | CFile::modeNoTruncate | CFile::shareDenyWrite |CFile::modeWrite );//用这样的模式进程创建或者检查文件名称的路径
  bInited =true;然后给标志一个新的标志,对此标志进行判断的时候就可以防止(在多次进行写入该次程序运行的时候多个地方的log信息)多次打开文件log文件。
 }

 char* org = _strdup(setlocale(LC_CTYPE,NULL));//为setlocale(LC_CTYPE,NULL)分配空间副本,需要头文件是#include<locale.h>
 setlocale( LC_CTYPE,"chs" );//支持简体中文


 //设置当前系统的时间
 CString  strErrorCodeInfo;
 switch(dwErrorCode)
 {
 case E_LOGTYPE_FAILED:
  strErrorCodeInfo =_T("FAILED---------->");
  break;
 case E_LOGTYPE_SUCCEEDED:
  strErrorCodeInfo =_T("SUCCEEDED------->");
  break;
 case E_LOGTYPE_INFOMATION:
  strErrorCodeInfo =_T("INFOMATION------>");
  break;
 default:
  strErrorCodeInfo =_T("OTHER----------->");
  break;
 }

 

 CTime myTime =CTime::GetCurrentTime();
 CString strTime;
 strTime.Format( _T("%d-%-d%-d %d:%d:%d"),
  myTime.GetYear(),
  myTime.GetMonth(),
  myTime.GetDay(),
  myTime.GetHour(),
  myTime.GetMinute(),
  myTime.GetSecond() );
 CString output;
 output.Format(_T("<%s>line: d - %s : %s%s\r\n"), //文件内容的格式
  strTime,
  line,
  func,
  strErrorCodeInfo,
  lpOutputString);

 log.WriteString(output);
 log.Flush();//强制缓冲区的内容写入指定文件

 

 setlocale( LC_CTYPE, org);
 free( org );

 return;
}

mfc一个日志库,非常好用,nice

Easylogging++的优势是它的速度和简单。 它是轻量级的,健壮的,高性能,线程和类型安全的,它有许多内置功能。它适合在中小型项目中使用,它提供了自定义日志格式的能力,还提供对第三方库,STL容...
  • a2311minghan
  • a2311minghan
  • 2016年11月04日 14:30
  • 839

Android中对Log日志文件的分析

一,Bug出现了, 需要“干掉”它  bug一听挺吓人的,但是只要你懂了,android里的bug是很好解决的,因为android里提供了LOG机制,具体的底层代码,以后在来分析,只要你...
  • vane918
  • vane918
  • 2016年09月13日 16:16
  • 1186

log4j日志输出,以及生成日志文件

log4j.rootLogger=debug,appender,appender1      #如果在本地eclipse控制台输出 请解开下面的代码     #log4j.appender.ap...
  • doutao6677
  • doutao6677
  • 2017年05月31日 16:33
  • 285

linux下查看程序日志的一些总结

在开发中,我们经常在代码中添加日志,主要作用是程序在服务器上跑出bug时方便进行问题排查,因为在服务器上不可能像在本地运行程序那样debug,所以日志对于我们非常重要,几乎就是解决问题唯一能依赖的东东...
  • joenqc
  • joenqc
  • 2017年03月09日 15:50
  • 2379

ubuntu 15.04 /var/log/下各个日志文件及修复无message文件和debug文件

本文简单介绍ubuntu/var/log/下各个日志文件,方便出现错误的时候查询相应的log/var/log/alternatives.log-更新替代信息都记录在这个文件中/var/log/appo...
  • jiandanjinxin
  • jiandanjinxin
  • 2016年08月02日 19:19
  • 2654

分享个C++日志记录类以及日志记录程序

前言 个人觉得开发中比较重要的一点就是“不要重复发明轮子”,现在国外、国内开源软件遍地开花,尤其是Google,开源了一系列性能、架构特别好的代码,如果能够用开源的应该尽量避免自己造轮子。那么为什么不...
  • mfcing
  • mfcing
  • 2015年12月01日 21:48
  • 7971

对于大日志分割的几种方法

对于大日志分割的几种方法当日志容量上G的时候,用vi查看具体内容效率就会变得特别低,这个时候就需要将大日志进行分割。 为了比较各种分割方法的效果,我选取的测试日志基本信息如下:# ls -lrth ...
  • u012949658
  • u012949658
  • 2017年05月30日 22:15
  • 2100

Log日志详解分析

使用日志记录信息 关于日志级别 日志可分为五个级别 DEBUG :为程序的调试信息,最低级 INFO :为一般要显示的信息,比如登录登出 ERROR:为严重错误 主要是程序的错误 WARN :为一般警...
  • oChangWen
  • oChangWen
  • 2016年07月02日 23:22
  • 2795

JVM崩溃日志分析2,没有生成hs_err_<pid>.log日志原因分析

tomcat崩溃了,但是也没有生成hs_err_.log日志,但是生成了core日志,tomat的日志下边只报了一下边的错误:        #       # A fatal error has b...
  • achilles12345
  • achilles12345
  • 2016年03月14日 17:18
  • 2454

python--- 备份日志(待优化)

root@kali:~/python/log# ls account.log backup.log ext.txt logback.py logger.py logger.pyc root@...
  • xwbk12
  • xwbk12
  • 2017年06月14日 00:06
  • 248
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC 产生log日志文件的问题
举报原因:
原因补充:

(最多只允许输入30个字)