`
wangangie16
  • 浏览: 43470 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

日志记录组件

 
阅读更多

  我的日志记录组件 - 东方散人 - CSDN博客
  和大家分享下我写的日志记录文件组件。下面是一些定义和调用的封装。如存在bug,欢迎指正。
  如需要demo程序和组件可去我在csdn下的下载资源或是去风华软件在线(www.fhuasoft.cn)网站上去下载。
  //下面是定义文件
  #ifndef _DEBUG_TRACE_2004
  #define _DEBUG_TRACE_2004
  #include 
  #include "logdeal.h"
  #define DOUT_FILE 0x0001 //将调试信息输出到文件中去
  #define DOUT_VIEW 0x0002 //将调试信息输出到DebugView中去
  #define DOUT_ALL 0xffff //将调试信息发到所有接受调试信息的模块中去
  class CLog
  {
  public:
  CLog();
  ~CLog();
  static CLog* Create();
  BOOL Trace(BSTR s);
  void AddRef();
  void Release();
  private:
  CComPtrm_pLog;
  static CLog *plog;
  DWORD m_dwRef;
  CRITICAL_SECTION m_cr;
  };
  #define DEBUG_TRACE
  #ifdef DEBUG_TRACE
  BOOL DebugTrace(LPCTSTR lpszFormat,...);
  BOOL DLOGTrace(LPCTSTR lpszFormat,...);
  BOOL DTrace(int, LPCTSTR lpszFormat,...);
  #define DG DTrace 
  #define DT DebugTrace
  #define _DT DEBUG_TRACE
  #else
  #define DT
  #define DG
  #undef _DT
  #endif
  #endif
  //下面是实现文件
  #include "stdafx.h"
  #include 
  #include "DT.h"
  #ifdef DEBUG_TRACE
  BOOL DebugTrace(LPCTSTR lpszFormat,...)
  {
  ASSERT(AfxIsValidString(lpszFormat));
  static HWND hwnd = ::FindWindowA(NULL, "DbgView");
  if(!IsWindow(hwnd))
  hwnd = ::FindWindowA(NULL, "DbgView");
  if(hwnd)
  {
  CString szMsg;
  va_list argList;
  va_start(argList, lpszFormat);
  try
  {
  szMsg.FormatV(lpszFormat, argList);
  }
  catch(...)
  {
  szMsg = "DebugHelper输出字符串格式错误!";
  }
  va_end(argList);
  DWORD dwId = GetCurrentProcessId();
  ::SendMessage(hwnd,WM_SETTEXT,dwId,(LPARAM)(LPCTST R)szMsg);
  return TRUE;
  }
  return FALSE;
  }
  BOOL DLOGTrace(LPCTSTR lpszFormat,...)
  {
  ASSERT(AfxIsValidString(lpszFormat));
  {
  CString szMsg;
  va_list argList;
  va_start(argList, lpszFormat);
  try
  {
  szMsg.FormatV(lpszFormat, argList);
  }
  catch(...)
  {
  szMsg = "DebugView输出字符串格式错误!";
  }
  va_end(argList);
  CLog *log = CLog::Create();
  log->Trace(szMsg.AllocSysString());
  log->Release();
  return TRUE;
  }
  return FALSE;
  }
  BOOL DTrace(int ntype, LPCTSTR lpszFormat,...)
  {
  static int nt = -1;
  if(nt SetFile(T2W(str));
  m_dwRef = 0;
  }
  CLog::~CLog()
  {
  if(m_pLog)
  {
  m_pLog.Release();
  }
  ::CoUninitialize();
  //  if(CLog::m_pLog)
  }
  CLog *CLog::Create()
  {
  if(plog == NULL)
  {
  plog = new CLog();
  }
  plog->AddRef();
  return plog;
  }
  void CLog::AddRef()
  {
  EnterCriticalSection(&m_cr);
  m_dwRef ++;
  LeaveCriticalSection(&m_cr);
  }
  void CLog::Release()
  {
  EnterCriticalSection(&m_cr);
  m_dwRef --;
  if(m_dwRef == 0)
  {
  DeleteCriticalSection(&m_cr);
  delete plog;
  }
  else
  LeaveCriticalSection(&m_cr);
  }
  BOOL CLog::Trace(BSTR s)
  {
  if(plog && m_pLog)
  {
  EnterCriticalSection(&m_cr);
  HRESULT hr = m_pLog->Trace(s) ;
  LeaveCriticalSection(&m_cr);
  return hr == S_OK;
  }
  return FALSE;
  }
  本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/nxjbill/archive/2008/04/29/23 42587.aspx
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics