自己写了一个Multi-Byte和UNICODE两个版本的TRACE函数。
#include <windows.h> #include <stdio.h> #define BUFSIZE_MAX 1024 #ifdef _DEBUG #ifdef UNICODE static void MYTRACE(wchar_t *fmt, ...) { // 取得时间戳 [年-月-日 时:分:秒] SYSTEMTIME time; GetLocalTime(&time); wchar_t timeBuf[21] = {0}; swprintf_s(timeBuf, L"[%d-%d-%d %d:%d:%d]", time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond); va_list args; wchar_t buf[BUFSIZE_MAX] = {'\0'}; va_start(args, fmt); _vsnwprintf_s(buf, BUFSIZE_MAX, fmt, args); // output to debug window. OutputDebugString(timeBuf); OutputDebugString(buf); // output to console. printf("%s%s", timeBuf, buf); // output to file. FILE *fp = NULL; _wfopen_s(&fp, L"debug.log", L"a+,ccs=UTF-8"); fputws(timeBuf, fp); fputws(buf, fp); fclose(fp); } #else // UNICODE static __inline void MYTRACE(char *fmt, ...) { // 取得时间戳 [年-月-日 时:分:秒] SYSTEMTIME time; GetLocalTime(&time); char timeBuf[21] = {'\0'}; sprintf(timeBuf, "[%d-%d-%d %d:%d:%d]", time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond); va_list args; char buf[BUFSIZE_MAX] = {'\0'}; va_start(args, fmt); vsprintf(buf, fmt, args); // output to debug window. OutputDebugString(timeBuf); OutputDebugString(buf); // output to console. printf("%s%s", timeBuf, buf); // output to file. FILE *fp = fopen("debug.log","a+"); fwrite(timeBuf,strlen(timeBuf),1,fp); fwrite(buf,strlen(buf),1,fp); fclose(fp); } #endif // UNICODE #else // _DEBUG static inline MYTRACE(char* fmtStr, ...) {} #endif // _DEBUG