Я пишу общие функции ведения журнала для использования в среде C ++. Он содержит msg_Log_level и message, и в зависимости от настроенного во время выполнения log_level, печатается сообщение или нет. Я хочу иметь настроенный_уровень_уровня на уровне экземпляра класса вместо глобального элемента управления. Как я это сделал.
Предположим, я принимаю log_level от 0 до 4. Теперь пользователь может вызывать LOG_INFO (0, "hello world_0");или LOG_INFO (2, "привет, мир_4");Если у меня настроен уровень_лог_ 0, то будет напечатано только самое пожарное сообщение, если настроено-уровень_2 или выше, оба сообщения будут напечатаны.
В этой среде у меня может быть много классов с несколькими экземплярами. Я хочу иметь контроль уровня экземпляра класса для этого макроса. Как мне это сделать. У меня также есть статические функции в классах.
Я думал о том, что в макросе я добавлю еще один аргумент для configure_log_level: Before:
define LOG_INFO (verbosity, f_,. ..) report_info (многословие, (f_), ## VA_ARGS )
После регистрации конкретного экземпляра:
определить LOG_INFO (многословие, f_, ...) report_info(config_log_level, verbosity, (f_), ## VA_ARGS )
И я думал о наличии глобальной переменной:
int __attribute__((weak)) configured_log_level= 2;
И такая же переменная имени будет вкласс, так что я могу иметь контроль на уровне экземпляра класса. например, в классе ABC,
ABC::hello(){
LOG_INFO(2, "hii"); // here, it will use configured_log_level of ABC class instance.
}
Но у меня также есть некоторые статические функции, поэтому я не могу использовать здесь динамические переменные.
Любые предложения, как мне этого добиться.