Cómo eliminar las declaraciones de depuración de registro de un programa

estoy usandoboost::log como un registrador para mi programa de C ++. Durante el desarrollo, a menudo lo uso de esta manera, por ejemplo:

#define LOG(severity) BOOST_LOG_SEV(boost::logger::get(), (severity))
#define LOG_ERR LOG(Severity::error)
#define LOG_INFO LOG(Severity::info)
#define LOG_DEBUG LOG(Severity::debug)

dóndeBOOST_LOG_SEV es la facilidad provista porboost::log, mientrasLOG, LOG_ERROR, LOG_INFO, LOG_DEBUG Son atajos definidos por mi.

En breve,BOOST_LOG_SEV compara dinámicamente la severidad de depuración actual con la severidad pasada a la macro misma para decidir si emitir o no la salida.

Este es un ejemplo de un programa que usa las macros anteriores para propósitos de depuración:

// set at compile time
#define MAX_LOG_SEVERITY Severity::debug

int main() {
   // Print all the messages with a
   // Severity <= MAX_LOG_SEVERITY defined before compiling
   boost::log::set_severity(boost::logger::get(), MAX_LOG_SEVERITY); // set_severity() is fictitious just to give you an idea

   // bool err = ...
   if (err)
      LOG_ERR << "An error occurred";
   else 
      LOG_INFO << "Okay;
   LOG_DEBUG << "main() called";
}

Ahora, al lanzar el programa para un entorno de producción, depurar mensajes con unSeverity::debug Nivel realmente no tiene sentido. Podría ocultarlos de la salida simplemente disminuyendoMAX_LOG_SEVERITY aSeverity::info, pero el problema es que las llamadas realizadas porLOG_DEBUG No se eliminará del código ejecutable. Esto tiene un impacto negativo tanto en la eficiencia como en el tamaño del objeto.

El código está lleno de declaraciones de registro y realmente me gustaría preservar el uso simple deoperator<<().

Sin tocar esas afirmaciones, ¿hay alguna mejor definición de macro / truco paraLOG_DEBUG eso haría que el preprocesador o el compilador (durante sus optimizaciones) "omita" o "elimine" las declaraciones de depuración cuandoMAX_LOG_SEVERITY se establece en elSeverity::debug constante?

Respuestas a la pregunta(3)

Su respuesta a la pregunta