Categories: wxWidgets

Прозрачное журналирование с wxLog

В wxWidgets есть отличный механизм журналирования wxLog.
С его помощью можно решить проблему ведения лога одновременно в файл и, например, в текстовый контрол.

Если необходимо выводить сообщения в файл не только в ANSI, а и в Unicode,
то очень удобно использовать логгер wxLogStream.
Для его использования, потребуется собрать (если еще не собрано) wxWidgets с выставленной поддержкой std потоков:

#define wxUSE_STD_IOSTREAM 1

в файле setup.h. После этого, в приложении потребуется установить целевой логгер:

//wxTestApp.h
// в классе приложения добавить мембер потока
...
#include
...

class wxTestApp: public wxApp
{
...
private:
    std::ofstream m_logStream;
...
};

//wxTestApp.cpp
// в OnInit() проинициализировать целевой логгер

bool wxCDCreatorApp::OnInit() {
    // задаем имя лога (в каталоге приложения, файл <имя файла приложения>.log
    wxString logPath = wxwxPathOnly(wxGetApp().argv[0]) +
wxFileName::GetPathSeparator() + GetAppName() +  wxT(".log");
    m_logStream.open(logPath.GetData());

    // не забываем удалить предыдущий логгер
    delete wxLog::SetActiveTarget(new wxLogStream(reinterpret_cast<std::ostream*>(&m_logStream)));

    // можно работать
    wxLogMessage(wxT("Запуск приложения..."));
...
// инициализация приложения
}

// и в OnExit() закрываем поток
int wxCDCreatorApp::OnExit()
{
    wxLogMessage(wxT("Выход..."));
    m_logStream.close();
    return wxApp::OnExit();
}

После этого, в любой части приложения возмножно с помощью функций wxLogMessage[/sourcecode], wxLogDebug[/sourcecode] (только в отладочной версии),
wxLogTrace[/sourcecode] вести журналирование. В результате работы, в лог пишутся сообщения в примерно таком формате:

09:55:05: Запуск приложения...
T-Rex

Share
Published by
T-Rex

Recent Posts

Разработка кроссплатформенных модульных приложений на C++ с библиотекой wxWidgets

Введение Уже долгое время не пишу статьи о разработке, хотя сам процесс написания мне очень…

11 years ago

wxWidgets App With Plugins (Windows/Linux/Mac) – Sample Source Code

I can see that there is still a lot of topics at wxWidgets forums related…

11 years ago

wxToolBox is Now Open-Source!

I've just published the source code of wxToolBox component and a couple of sample apps at…

11 years ago

Microsoft Kinect Helper Library and Sample for wxWidgets

Microsoft released their Kinect SDK several days ago. So, for those wxWidgets developers who are…

13 years ago

wxJSON 1.1.0 Released

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to…

15 years ago

wxRuby. Оно даже работает!

Вдохновленнный читаемой нынче книгой My Job Went to India: 52 Ways to Save Your Job…

15 years ago