Как использовать Log4Cplus в DLL

Как лучше всего использовать Log4Cplus в DLL?

Я хочу использовать FileAppender.

У меня есть Win32 DLL, которая имеет DLLMain и 3 экспортированных функции.

Где я могу определить объект Appender и Layout? Где установить их свойства?
Где я могу связать их с регистратором?

Я хочу использовать регистратор во всех классах внутри DLL, я думаю, просто позвонив:

Logger myLogger= Logger::getInstance("myLoggerName");

где я должен поместить код, чтобы я мог включить макросы log4cplus и работать во всех моих функциях внутри DLL?

В обычной программе я буду использовать глобальные переменные, использовать main или некоторые ctor для их настройки, и тогда все смогут их увидеть.
Что мне делать внутри DLL?

(Я не хочу вызывать код установки в каждой экспортируемой функции, но только один раз при загрузке dll)

2

Решение

Где я могу определить объект 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.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]