更改 wxWidgets 日志级别

Change wxWidgets LogLevel

我无法更改 wxLog 功能的 LogLevel。

我想要实现的目标:将所有内容记录到日志文件中。

在下面的示例代码中,日志记录基本有效,但我只看到日志级别为 WarningError 的消息。我认为使用 wxLog::SetLogLevel(wxLOG_Info); 设置 logLevel 应该就足够了,但显然我遗漏了一些东西。有什么提示吗?

#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
#include <wx/stdpaths.h>

class TestApp : public wxApp
{
public:

    virtual bool OnInit();

private:

    FILE* m_pLogFile;
};


bool TestApp::OnInit()
{
    m_pLogFile = fopen("c:\tmp\foo.txt", "a+");
    if (m_pLogFile == NULL)
    {
        return false;
    }

    wxLogStderr* pFileLogger = new wxLogStderr(m_pLogFile);
    delete wxLog::SetActiveTarget(pFileLogger);

    wxLog::SetLogLevel(wxLOG_Info);

    wxLogError(L"Error");
    wxLogWarning(L"Warning");
    wxLogInfo(L"Info");
    wxLogVerbose(L"Verbose");
    wxLogDebug(L"Debug");

    wxFrame* pFrame = new wxFrame(NULL, wxID_ANY, L"Title");
    pFrame->Show();

    return true;
}

wxIMPLEMENT_APP(TestApp);

由于不幸的历史原因 wxLogInfo() 实际上与 wxLogVerbose() 完全相同,并且出于同样不幸的向后兼容性原因,必须通过显式调用 wxLog::SetVerbose(true) 来启用详细日志记录,因此没有"Info" 和 "Verbose" 都没有被记录(并且两者都会被记录)。

实际上我们可能最终应该在 wxWidgets 3.2 中修复这个问题,所以希望它在下一个版本中不会像这样工作。但是现在您需要调用 SetVerbose() 来启用这些消息 此外 还要设置日志级别。