#include<stdio.h>
#include<windows.h>
enum E_TraceLevel // ¸ú×Ù¼¶±ð
{
e_DEBUG = 0,
e_TRACE = 1,
e_ERROR = 2,
e_LOG = 3,
e_ALARM = 4,
e_FATAL = 5,
e_ASSERT= 6
};
int gRunLevel = e_DEBUG;
#define LOG_DEBUG e_DEBUG, __FILE__, __LINE__
#define LOG_TRACE e_TRACE, __FILE__, __LINE__
#define LOG_ERROR e_ERROR, __FILE__, __LINE__
#define LOG_LOG e_LOG, __FILE__, __LINE__
#define LOG_ALARM e_ALARM, __FILE__, __LINE__
#define LOG_FATAL e_FATAL, __FILE__, __LINE__
#define PRINTLOG PrintLog
void PrintLog (
IN E_TraceLevel _eTraceLevel
, IN const char *_sFile
, IN const int _iLine
, IN const char *_sFmt
, IN ...)
{
if(gRunLevel > _eTraceLevel) return;
va_list args;
char strInformation[2048];
va_start(args, _sFmt);
_vsnprintf(strInformation, sizeof(strInformation)-1,_sFmt,args);
FILE * fp = fopen("log.txt", "a");
SYSTEMTIME DateTime;
if(fp == NULL)
{
return;
}
GetLocalTime(&DateTime);
fprintf(fp
, "[%04d-%02d-%02d %02d:%02d:%02d] [File:%d Line:%d] %s /n"
, DateTime.wYear
, DateTime.wMonth
, DateTime.wDay
, DateTime.wHour
, DateTime.wMinute
, DateTime.wSecond
, _sFile
, _iLine
, strInformation
);
fclose(fp);
va_end(args);
}
//使用得例子
int main(int argc, char* argv[])
{
PRINTLOG(LOG_DEBUG, "test log fun [%d]", 20);
return 0;
}