C++ 如何将ostream重定向到Boost日志库
我有一个进度条函数,它将std::ostream作为参数。为了便于描述,我在这里对其进行了简化C++ 如何将ostream重定向到Boost日志库,c++,boost,C++,Boost,我有一个进度条函数,它将std::ostream作为参数。为了便于描述,我在这里对其进行了简化 void someprogressbar(std::ostream & stream) { stream << "Hello"; } void someprogressbar(std::ostream&stream) { stream为了通过ostream将输出重定向到Boost记录器,我需要使用Boost Iostreams库创建一个接收器。感谢@sehe的提示 我在以
void someprogressbar(std::ostream & stream)
{
stream << "Hello";
}
void someprogressbar(std::ostream&stream)
{
stream为了通过ostream将输出重定向到Boost记录器,我需要使用Boost Iostreams库创建一个接收器。感谢@sehe的提示
我在以下实现中使用C++11:
#include <iosfwd>
#include <boost/iostreams/categories.hpp>
class Logger_Sink
{
public:
typedef char char_type;
typedef boost::iostreams::sink_tag category;
Logger_Sink() = default;
virtual
~Logger_Sink() = default;
virtual
std::streamsize
write(
char_type const * s,
std::streamsize n) = 0;
};
class cout_Sink: public Logger_Sink
{
public:
std::streamsize
write(
char_type const * s,
std::streamsize n)
{
BOOST_LOG_TRIVIAL(info) << std::string(s, n);
return n;
}
};
#包括
#包括
类记录器U接收器
{
公众:
typedef char_类型;
typedef boost::iostreams::sink_标记类别;
记录器_Sink()=默认值;
事实上的
~Logger_Sink()=默认值;
事实上的
std::streamsize
写(
字符类型常量*s,
std::streamsize n)=0;
};
类cout\u Sink:公共记录器\u Sink
{
公众:
std::streamsize
写(
字符类型常量*s,
标准::流大小(n)
{
BOOST_LOG_little(信息)编写一个整洁的小streambuf(BOOST Iostream接收器),并将其实现为写入BOOST日志。(这可能已经由某人实现了)我仍在努力理解汇。我设置了一个全局Boost logger,它可以打印到控制台和多个文件。我需要挂接这个streambuf吗?你能给我指一个教程或一个例子吗?我还没有找到一个实现我所需的示例。好的,我找到了解决方法。我将发布一个答案lat呃。
#include <iostream>
#include <boost/iostreams/stream.hpp>
namespace io = boost::iostreams;
io::stream_buffer<cout_Sink> cout_buf((cout_Sink()));
std::ostream mycout(&cout_buf);