繁体   English   中英

应用程序登录纯win32项目

[英]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一起观看。

log4c是广泛使用的log4j框架的C版本(参见上面的log4cxx,适用于C ++)。 您当然可以根据需要随意调整输出数据。

它必须使用GCC编译,但一旦构建,您应该能够使用Microsoft工具链编译的程序中的库。

此前一个问题涵盖了其他一些C选项。

那时候,我成功使用了log4cxx

如果您可以在项目中使用ATL ,我建议您这样做,如果您没有被一些C ++模板吓坏了:-)

它是一个非常轻量级的库,但对于基本操作非常有用,你也可以决定静态链接它,当你不想要部署问题时,这很酷。

并且,回到跟踪问题,它有一个非常有用的ATLTRACE宏。

说到开发部分(相当于“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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM