将boost日志消息重定向到Window控件

时间:2015-09-18 13:46:47

标签: boost

我正在使用boost库制作MFC windows应用程序 我想将提升日志消息重定向到像ListBox这样的Windows控件,以便在GUI窗口中查看它。

我认为我需要实现一个接收器后端,它最终使用PostMessage() API将日志消息发布到目标窗口。

感谢。

1 个答案:

答案 0 :(得分:0)

这是自我回答。 我应该看一下与日志工具相关的库源文件 谢谢提升。制作自定义日志接收器并不困难。 我在boost库中引用了debug_output_backend.hpp文件。

#include <boost/log/core.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/sinks/sync_frontend.hpp>
#include <boost/log/sinks/basic_sink_backend.hpp>
#include <boost/log/trivial.hpp>
#include <boost/shared_ptr.hpp>

namespace logging = boost::log;
namespace sinks = boost::log::sinks;
class customlog_sink : public sinks::basic_formatted_sink_backend<char, sinks::concurrent_feeding>
{
public:
    void consume(const logging::record_view& rec, const string_type& fstring)
    {
        std::ostringstream os;
        os << "<" << rec[boost::log::trivial::severity] << "> " << fstring;
        ::PostMessage(hwnd_, UWM_LOG_MESSAGE, 0, (LPARAM)strdup(os.str().c_str()));
    }

    customlog_sink(HWND hwnd)
        : hwnd_(hwnd)
    {
    }

private:
    HWND hwnd_;
};

void init_log(HWND hwnd)
{
   typedef sinks::synchronous_sink< customlog_sink > sink_t;


   boost::shared_ptr< sink_t > sink(new sink_t(hwnd));
   boost::shared_ptr< logging::core > core = logging::core::get();

   core->add_sink(sink);
}