Registro simultáneo en consola y archivo usando Boost

Necesito ayuda para inicializar el marco de registro de impulso para iniciar sesión simultáneamente en un archivo de registro con nombre y también en la consola (el archivo de registro con nombre no requerirá rotación periódica ni ninguna de esas configuraciones sofisticadas en muchos de los tutoriales de impulso).

El texto de registro debe ir a ambos sumideros (archivo y consola) simultáneamente, sin embargo, necesito formatear el resultado de la consola de forma ligeramente diferente, ya que será visto por un usuario. Pude obtener los conceptos básicos de inicio de sesión en 2 sumideros separados trabajando usando elimpulsar el código de ejemplo. Es demasiado complejo para lo que necesito hacer y es realmente confuso en lo que respecta al acceso al registrador apropiado. Todo lo que necesito hacer es enviar mensajes con marca de tiempo al archivo de registro y tener la misma información sin las marcas de tiempo o las nuevas líneas enviadas al registro de la consola (colocando nuevas líneas explícitamente solo como lo haría normalmente con << std :: operaciones de transmisión endl). Realmente me gustaría seguir con el marco de registro de boost, ya que brinda la flexibilidad para expandirse en el futuro.

Con el ejemplo, probé con la cola de los archivos de registro; sin embargo, la salida del registro no parece enjuagarse automáticamente después de cada entrada de registro. Aunque esto no es muy importante para los registros de archivos, sería crítico para la transmisión de salida de la consola, ya que representa la actividad en vivo que un usuario estará monitoreando.

Cualquier ayuda o incluso mejor, algún código de muestra realmente simple para que los conceptos básicos funcionen será muy apreciado.

La forma en que configuro mi registro (según el enlace anterior) es como se muestra a continuación, me gustaría reemplazar uno de estos sumideros registrados con un registrador de consola, pero no estoy seguro de cómo. Espero que un registrador de consola tenga descarga automática.

// 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();

Respuestas a la pregunta(1)

Su respuesta a la pregunta