Printf宏定义日志
#if (defined(DEBUG) || defined(_DEBUG))
#define DEBUG_PRINT(format,...) printf("File: " __FILE__ ", Line: %05d: " format "/n", __LINE__, ##__VA_ARGS__)
#else
#define DEBUG_PRINT(format,...)
#endif
void LogDbg(const char* fmt, ...)
{
static FILE* gfp = NULL;
va_list va = nullptr;
va_start(va, fmt);
if (gfp == NULL)gfp = fopen("run.log", "w");
if (gfp != NULL)::vfprintf(gfp, fmt, va), ::fflush(gfp);
va_end(va);
}
打印日志
class ConsoleManager
{
FILE* pStdIn = NULL;
FILE* pStdOut = NULL;
FILE* pStdErr = NULL;
public:
static ConsoleManager* CM()
{
static ConsoleManager ConsoleManagerInstance = {};
return &ConsoleManagerInstance;
}
public:
void FormatPrintf(const char* format, ...)
{
va_list va = nullptr;
va_start(va, format);
if (pStdOut != NULL)
{
::vfprintf(pStdOut, format, va);
::fflush(pStdOut);
}
else
{
::vfprintf(stdout, format, va);
}
va_end(va);
}
void FormatPrintfW(const wchar_t* format, ...)
{
va_list va = nullptr;
va_start(va, format);
if (pStdOut != NULL)
{
::vfwprintf(pStdOut, format, va);
::fflush(pStdOut);
}
else
{
::vfwprintf(stdout, format, va);
}
va_end(va);
}
void StartConsole()
{
::setlocale(LC_ALL, ("chs"));
if (::AllocConsole() == TRUE)
{
::freopen_s(&pStdIn, ("CONIN$"), ("r"), stdin);
::freopen_s(&pStdOut, ("CONOUT$"), ("w"), stdout);
::freopen_s(&pStdErr, ("CONOUT$"), ("w"), stderr);
}
}
void CloseConsole()
{
if (pStdIn != NULL)
{
::fclose(pStdIn);
pStdIn = NULL;
}
if (pStdOut != NULL)
{
::fclose(pStdOut);
pStdOut = NULL;
}
if (pStdErr != NULL)
{
::fclose(pStdErr);
pStdErr = NULL;
}
::FreeConsole();
}
public:
ConsoleManager()
{
#if defined(_DEBUG) || defined(DEBUG)
StartConsole();
#endif
}
virtual ~ConsoleManager()
{
#if defined(_DEBUG) || defined(DEBUG)
CloseConsole();
#endif
}
};