更改wxWidgets LogLevel

时间:2016-03-04 09:40:28

标签: c++ wxwidgets

我无法更改wxLog功能的LogLevel。

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

在下面的示例中,代码日志记录基本上有效,但我只看到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);

1 个答案:

答案 0 :(得分:1)

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

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