• 日志记录组件


    http://blog.csdn.net/nxjbill/archive/2008/04/29/2342587.aspx

    我的日志记录组件 - 东方散人 - CSDN博客

    和大家分享下我写的日志记录文件组件。下面是一些定义和调用的封装。如存在bug,欢迎指正。

    如需要demo程序和组件可去我在csdn下的下载资源或是去风华软件在线(www.fhuasoft.cn)网站上去下载。

    //下面是定义文件

    #ifndef _DEBUG_TRACE_2004
    #define _DEBUG_TRACE_2004

    #include <atlbase.h>
    #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:
    CComPtr<ILOG>m_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 <AFXPRIV.H>
    #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)(LPCTSTR)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 < 0);

    if(ntype & DOUT_FILE)
    DLOGTrace(lpszFormat);
    if(ntype & DOUT_VIEW)
    DebugTrace(lpszFormat);

    return TRUE;
    }
    #endif

    #include "logdeal_i.c"
    CLog *CLog::plog = NULL;
    CLog::CLog()
    {
    CoInitialize(NULL);
    ::CoCreateInstance(CLSID_LOG , NULL, CLSCTX_INPROC, IID_ILOG,
    (void **)&m_pLog);
    plog = NULL;

    InitializeCriticalSection(&m_cr);
    //取文件名
    TCHAR buf[MAX_PATH] ={0};
    TCHAR *s;
    TCHAR str[MAX_PATH] = {0};
    GetModuleFileName(NULL, buf, MAX_PATH);
    s = _tcsrchr(buf, '//');
    _tcsncpy(str, buf, _tcslen(buf) - _tcslen(s));
    SYSTEMTIME t;
    GetSystemTime(&t);
    _stprintf(buf, "//%02d%02d%02d%02d%02d%02d%", t.wYear, t.wMonth, t.wDay,
    t.wHour, t.wMinute, t.wSecond);
    _tcscat(str, buf);
    _tcscat(str, _T(".txt"));
    USES_CONVERSION;
    if(m_pLog)
    m_pLog->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;
    }



  • 相关阅读:
    使用代理加快SDK Manager的下载速度
    ADT-Bundle运行的错误的排错
    转:Android开发之JNI入门-NDK从入门到精通
    Android NDK的总总误解
    mysql 数据库 一些常用语句 查内存 索引内存
    递归方法 练习编写
    ES 搜索概述
    PHP 数字类型 加 减 乘 除运算 bc函数
    php 控制反转 和 依赖注入
    Thinkphp 3 和 Thinkphp5 区别
  • 原文地址:https://www.cnblogs.com/carl2380/p/2317360.html
Copyright © 2020-2023  润新知