es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo usar Boost::log para no reescribir el archivo de registro?

A continuación se muestra un ejemplo simple de cómo usar boost::log para escribir un registro:

#include <boost/log/trivial.hpp>

namespace logging = boost::log;

logging::add_file_log(“sample.log”)->set_filter(
logging::trivial::severity >= logging::trivial::info
);

BOOST_LOG_TRIVIAL(info) << “contenido del registro”;

Cada vez que se ejecuta “logging::add_file_log(“sample.log”)”, se reescribe el archivo de registro –se borra el contenido original y se escribe un nuevo registro. Por lo tanto, no se puede usar para un sistema multi-proceso con un sólo archivo de registro.
¿Cómo puedo configurarlo para que no sobrescriba el archivo?

Editar:
He encapsulado este boost::log en una DLL y he intentado hacer que otros archivos ejecutables lo llamen.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para establecer que boost::log no sobrescriba el archivo de registro, necesitas utilizar la función boost::log::add_file_log con un conjunto diferente de parámetros. En lugar de simplemente pasar el nombre del archivo, también debes especificar el modo de apertura de archivo como std::ios_base::app, que significa “modo de añadir”. Esto asegurará que los nuevos mensajes de registro se agreguen al final del archivo de registro, en lugar de sobrescribir todo el archivo.

    Aquí hay un ejemplo actualizado de código:

    #include <boost log/trivial.hpp="">
    #include <boost log/utility/setup/file.hpp="">
    
    namespace logging = boost::log;
    
    logging::add_file_log(
        boost::log::keywords::file_name = "sample.log",
        boost::log::keywords::filter = logging::trivial::severity >= logging::trivial::info,
        boost::log::keywords::open_mode = std::ios_base::app
    );
    
    BOOST_LOG_TRIVIAL(info) << "log content";
    

    Con este código, sample.log se abrirá en modo de añadir, por lo que los nuevos mensajes de registro se agregarán al final del archivo en lugar de sobrescribirlo.

    Ten en cuenta que si estás utilizando este código en un sistema multiproceso, debes asegurarte de que múltiples procesos no estén escribiendo en el mismo archivo de registro simultáneamente, ya que esto puede resultar en datos de registro corruptos. Una solución es utilizar un servicio de registro dedicado que maneje los mensajes de registro de múltiples procesos y los escriba en el archivo de registro de manera segura.

Comments are closed.