通常,我们在编写小型软件时,不太注重使用系统的日志维护功能,而是自己定义日志文件。但当我们的软件变的庞大时,为了更好的维护日志,最好的办法就是使用系统提供的日志功能,系统会自动帮我们进行维护。
下面介绍几个打印日志的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;
}
查看系统日志方法:
在控制面板的管理工具里,选择“事件查看器”—>“应用程序”,即可看到。