Как лучше всего использовать Log4Cplus в DLL?
Я хочу использовать FileAppender.
У меня есть Win32 DLL, которая имеет DLLMain и 3 экспортированных функции.
Где я могу определить объект Appender и Layout? Где установить их свойства?
Где я могу связать их с регистратором?
Я хочу использовать регистратор во всех классах внутри DLL, я думаю, просто позвонив:
Logger myLogger= Logger::getInstance("myLoggerName");
где я должен поместить код, чтобы я мог включить макросы log4cplus и работать во всех моих функциях внутри DLL?
В обычной программе я буду использовать глобальные переменные, использовать main или некоторые ctor для их настройки, и тогда все смогут их увидеть.
Что мне делать внутри DLL?
(Я не хочу вызывать код установки в каждой экспортируемой функции, но только один раз при загрузке dll)
Где я могу определить объект Appender и Layout? Где установить их свойства? Где я могу связать их с регистратором?
Вообще, я думаю, что ваша DLL должна иметь некоторые MyDLLInit()
Вы можете вызвать функцию, которая настроит log4cplus в соответствии с вашими потребностями.
Где я должен поместить код, чтобы я мог включить макросы log4cplus и работать во всех моих функциях внутри DLL?
Вам не нужно делать что-то особенное здесь. Просто включите loggingmacros.h
чтобы получить макросы и использовать их.
В обычной программе я буду использовать глобальные переменные, использовать main или некоторые ctor для их настройки, и тогда все смогут их увидеть. Что мне делать внутри DLL?
Мне кажется, что использование глобального Logger
экземпляр (который будет инициализирован вашим MyDLLInit()
функция) в порядке. Но если у вашей DLL есть своего рода «контекстный» дескриптор, который он возвращает своим пользователям, используйте его вместо этого и прикрепите Logger
экземпляр в дескриптор контекста вместо.
(Я не хочу вызывать код установки в каждой экспортируемой функции, но только один раз при загрузке dll)
Это не должно быть необходимым.
Посмотрите источники тестов, которые являются частью исходного дистрибутива, используйте их как примеры того, как вы можете создать экземпляр Appender
а также Layout
, Например., fileappender_test
Вам не нужно хранить ни Appender, ни Layout в своих переменных. Оба управляются log4cplus. После того как вы logger.addAppender(myappender)
(соответствует строке 23 в fileappender_test
выше), все переменные, включая myappender
может выйти из области видимости и может быть уничтожен, потому что Appender управляется Logger, а макет Appender — Appender.
Других решений пока нет …