log("Gsm start")
Хочется странного. Написание проверки if (settings.log) утомляет. Может я не вижу какой-то генерализованный метод включения/выключения вывода лог сообщений для определенной подсистемы?
Я делаю так. И уже внутри "syslogwrap.h" в зависимости от LOG_MODULE подставляю что мне нужно. Внути кода это всегда вызов вида SYSLOG_D("msg");
Если все эти названия где-то забиты, перебором из нужной структуры в цикле
#define в помощь
примерный вид враппера. в функцию wsyslog передается первым параметром битовая маска и уровень логирования. внутри функции определяется что выводить а что пропускать в зависимости от текущих настроек
Например есть file_utils.hpp, в нем fileOpen(), в которой при неудаче вызывается log().
Да просто Log(module, mesg) А внутри уже разбираться что включено а что нет
Ну это то что сейчас. А хочется не гадить везде параметром module
Что file?
Macro _ _ FILE_NAME _ _ в помощь
Как оно поможет?
Тогда в модуле #define modulenmae mod1 #include logging.h А внутри logging.h #define LOG(message) log(modulename, message) Макрос LOG разворачивается в функцию log(modulename, message)
Да, но есть еще общеиспользуемый код, в котором тоже вызывается log(), как туда передать modulename?
Задефайнить в нем #define modulename module_common
Так он не module_common.
1. Необходимо рассказать от чего зависит if (gEthernerSettings.log) или if (sGsmSettings.log) в тексте, а потом уже ждать какого-нибудь ответа или следующего вопроса.
Например, есть file_utils.cpp, в нем fileOpen(), надо при неудаче открытия файла выводить в лог, но только если fileOpen() вызывает подсистема с включенным логированием. Если fileOpen() вызывается из Ethernet.cpp и gEthernerSettings.log == true или вызывается из Gsm.cpp и gGsmSettings.log == true. И при этом не хочется прокидывать gEthernerSettings.log / gGsmSettings.log параметром в fileOpen(). Замечание о том что не надо логировать в fileOpen() опускаем, это просто как пример.
Обсуждают сегодня