Одновременный вход в консоль и файл с помощью Boost

Мне нужна помощь, чтобы инициализировать структуру ведения журнала буста, чтобы одновременно регистрировать как именованный файл журнала, так и консоль (именованный файл журнала не будет нуждаться в периодической ротации или какой-либо необычной настройке для многих руководств повышения).

Текст журнала должен поступать в оба приемника (файл и консоль) одновременно, однако мне нужно отформатировать вывод консоли немного по-разному, так как он будет просматриваться пользователем. Мне удалось получить основы ведения журнала в 2 отдельных приемниках, работающих с использованиемповысить пример кода, Это слишком сложно для того, что мне нужно сделать, и это действительно сбивает с толку, когда речь идет о доступе к соответствующему регистратору. Все, что мне нужно, - это отправлять сообщения с метками времени в файл журнала и иметь ту же информацию, без меток времени или новых строк, отправляемых в журнал консоли (добавление новых строк явно, как я обычно делаю с << std :: endl потоковые операции). Я действительно хотел бы придерживаться каркаса логирования boost, поскольку он дает гибкость для расширения в будущем.

В этом примере я попытался использовать tail -f для файлов журнала, однако вывод журнала не отображается автоматически после каждой записи журнала. Хотя это не очень важно для файловых журналов, это будет иметь решающее значение для потока вывода на консоль, поскольку он представляет активную активность, за которой будет следить пользователь.

Любая помощь или даже лучше, некоторые действительно простой пример кода, чтобы получить основы работы будет высоко ценится.

Как я настраиваю свою регистрацию (по ссылке выше), как показано ниже, я хотел бы заменить один из этих зарегистрированных приемников консольным регистратором - но я не уверен, как. Я ожидаю, что консольный логгер будет иметь автоматическую очистку.

// Setup the common formatter for all sinks
logging::formatter fmt = expr::stream
    << std::setw(6) << std::setfill('0') << line_id << std::setfill(' ')
    << ": <" << severity << ">\t"
    << expr::if_(expr::has_attr(tag_attr))
    [
        expr::stream << "[" << tag_attr << "] "
    ]
<< expr::smessage;

// Initialize sinks
typedef sinks::synchronous_sink<sinks::text_ostream_backend> text_sink;
boost::shared_ptr<text_sink> sink = 
    boost::make_shared<text_sink>();
sink->locked_backend()->add_stream(
    boost::make_shared<std::ofstream>(
        "full.log"));
sink->set_formatter(fmt);
// register the full log sink
logging::core::get()->add_sink(sink);

sink = boost::make_shared<text_sink>();
sink->locked_backend()->add_stream(
    boost::make_shared<std::ofstream>(
        "important.log"));
//    sink->set_formatter(fmt); (I removed this to not have any special formatting hopefully)
sink->set_filter(severity >= warning || 
    (expr::has_attr(tag_attr) && 
    tag_attr == "IMPORTANT_MESSAGE"));
// register the important log sink
logging::core::get()->add_sink(sink);
// Add attributes
logging::add_common_attributes();