打印系统日志(使用API)(转)

通常,我们在编写小型软件时,不太注重使用系统的日志维护功能,而是自己定义日志文件。但当我们的软件变的庞大时,为了更好的维护日志,最好的办法就是使用系统提供的日志功能,系统会自动帮我们进行维护。

下面介绍几个打印日志的API:

RegisterEventSource

函数原型:HANDLE RegisterEventSource(

  LPCTSTR lpUNCServerName,

  LPCTSTR lpSourceName

);

第一个参数:如果是本机的话,通常为NULL;

第二个参数:事件源名称。

 

ReportEvent

函数原型:BOOL ReportEvent(
  HANDLE hEventLog,
  WORD wType,
  WORD wCategory,
  DWORD dwEventID,
  PSID lpUserSid,
  WORD wNumStrings,
  DWORD dwDataSize,
  LPCTSTR* lpStrings,
  LPVOID lpRawData
);

第九个参数:要输出的日志字符串。其他略。

 

DeregisterEventSource

函数原型:BOOL DeregisterEventSource(
  HANDLE hEventLog
);

 

下面以代码形式介绍一下大概使用过程:

void MyReportEvent(

    LPTSTR pszSrcName, // event source name

    DWORD dwEventID,   // event identifier

    WORD wCategory,    // event category

    WORD cInserts,     // count of insert strings

    LPCTSTR *szMsg)    // insert strings

{

    HANDLE h;

 

    // Get a handle to the event log.

 

    h = RegisterEventSource(NULL,  // use local computer

            pszSrcName);           // event source name

    if (h == NULL)

    {

        printf("Could not register the event source.");

        return;

    }

 

    // Report the event.

     if (!ReportEvent(h,           // event log handle

            EVENTLOG_ERROR_TYPE,  // event type

            wCategory,            // event category 

            dwEventID,            // event identifier

            NULL,                 // no user security identifier

            cInserts,             // number of substitution strings

            0,                    // no data

            szMsg,                // pointer to strings

            NULL))                // no data

    {

        printf("Could not report the event.");

    }

 

    DeregisterEventSource(h);

    return;

}

 int _tmain(int argc, _TCHAR* argv[])

{

   LPCTSTR lpszError[] = {_T("Test_EventLog_Error")};

   MyReportEvent(_T("Test_EventLog"),0,0,1,(LPCTSTR*)&lpszError[0]);

 

   return 0;

}

 

查看系统日志方法:

在控制面板的管理工具里,选择“事件查看器”—>“应用程序”,即可看到。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值