[英]application logging in a pure win32 project
在Web开发中,我有自己的框架,它使用日志文件来帮助我开发和监视错误或生产。 这个Web框架几乎总是在* nix上运行,使用简单的纯文本作为logfile,logrotate和tail。
今天我正在创建一个win32应用程序,它将充当TCP / IP服务器(这是一个桌面应用程序,但嵌入了一些服务),我需要记录事件,以便了解事情何时变坏(在生产和开发中,调试而我正在创造它)。
我记得MFC,我有TRACE宏。 这对于开发调试来说很好。 在纯win32开发中是否有类似TRACE的东西?
对于生产日志,事件记录的最佳方法是什么? Windows事件日志或简单的纯文本文件? 如何在窗口中旋转它?
谢谢Daniel Koch
对于开发通常,使用一些OutputDebugString
包就足够了:
inline void logA(const char* format, ...)
{
char buf[1024];
wvsprintfA(buf, format, ((char*)&format) + sizeof(void*));
OutputDebugStringA(buf);
}
#define DEBUG_LOG_A(format, ...) logA( \
"(#" BOOST_PP_STRINGIZE( __LINE__ ) ") "__FUNCTION__ " : " \
format, __VA_ARGS__)
和DebugView一起观看。
那时候,我成功使用了log4cxx 。
说到开发部分(相当于“TRACE”),不仅可以,还可以设置颜色和字体样式。 首先,你打电话:
#include <conio.h>
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
要设置文本颜色,我使用:
inline void setcolor(int textcol, int backcol)
{
if ((textcol % 16) == (backcol % 16))textcol++;
textcol %= 16; backcol %= 16;
unsigned short wAttributes = ((unsigned)backcol << 4) | (unsigned)textcol;
CONSOLE_SCREEN_BUFFER_INFO csbi;
SetConsoleTextAttribute(hConsole, wAttributes);
}
然后,只需使用wprintf()来显示文本。 如果您想清除显示区域,请致电:
system("cls");
同时通过调用刷新显示:
void refresh()
{
HWND hwnd = FindWindowEx(NULL, NULL, L"CabinetWClass", NULL);
while (hwnd != NULL)
{
PostMessage(hwnd, WM_COMMAND, 41504, 0);
hwnd = FindWindowEx(NULL, hwnd, L"CabinetWClass", NULL);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.