日志记录组件

  我的日志记录组件 - 东方散人 - 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值