我正在使用boost库制作MFC windows应用程序 我想将提升日志消息重定向到像ListBox这样的Windows控件,以便在GUI窗口中查看它。
我认为我需要实现一个接收器后端,它最终使用PostMessage()
API将日志消息发布到目标窗口。
感谢。
答案 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);
}