Я пишу журналы для своего приложения, используя boost::log
. Я могу передать переменную среды, чтобы выбрать уровень ведения журнала следующим образом:
LOG_LEVEL=3 ./my_app
Каждый раз, когда я использую LOG_INFO
или LOG_TRACE
, макрос расширяется до состояния, которое проверяет выбранный уровень журнала и, если он совпадает, фактически печатает журнал. В противном случае ничего не произойдет.
В настоящее время я пишу свою собственную библиотеку журналов на основе boost::log
, чтобы добавить свои потребности. Я не вижу смысла проверять уровень журнала каждый раз, и я хотел бы пропатчить функцию после первой, если пропустить проверку в следующий раз. Например:
Я бы обернул макрос LOG_INFO
в свою собственную функцию. Первым делом в этой функции проверяется выбранный уровень журнала. Если уровень не совпадает, я бы заменил начало функции на ret
. Таким образом, я не буду проверять это условие снова.
- Как я могу создать такую логику, используя gcc в Linux? Я не знаю с чего начать.
- Компилятор может встроить мои функции, даже если он находится в другом файле cc во время компоновки. Если он сделает это (и сделает это), мой код операции
ret
разрушит все приложение. Любые предложения, что я могу сделать?
Спасибо