Има ли начин да се внедрят множество независими системи за регистриране с Boost.Log?

Boost.Log използва глобален сингълтон "core" обект, през който преминават всички съобщения в журнала. Тогава изглежда, че не би било лесно да има две независими задачи на отделни нишки с ефективно независими и отделно конфигурируеми стекове за регистриране.

Да предположим например, че и клас A, и клас B извикват клас C и трите класа извършват регистриране. Въпреки това бих искал работата, инициирана от клас A, да бъде регистрирана във файл "a.log", а работата, инициирана от клас B, да бъде регистрирана във файл "b.log". Има ли идиоматичен начин за постигане на този резултат в Boost.Log?

Моето приложение е динамично свързан C++, изградено на VC++ 2015/Windows и GCC 4.8.4/Ubuntu.


person Boinst    schedule 07.10.2015    source източник


Отговори (1)


Да, Boost.Log поддържа този случай на използване чрез атрибути и филтриране. По принцип това, което трябва да направите, е да имате два файлови приемника - за a.log и b.log. Във всеки приемник трябва да настроите филтър, който ще пропуска само регистрационни записи, маркирани по специален начин - чрез специална стойност на атрибут. След това добавяте регистратори към класове A и B и се уверете, че регистраторите имат специалния атрибут с различни стойности, които проверявате във филтрите, които сте задали.

Този сценарий е реализиран с регистратори на канали в Boost.Log. Регистраторът на канала има атрибут, наречен "Канал", който идентифицира източника на записите в журнала. Можете да създавате филтри, като използвате атрибута "Канал" с ламбда изрази или с вашия персонализирана функция.

person Andrey Semashev    schedule 07.10.2015
comment
Благодаря, това изглежда като добър подход. този отговор на различен въпрос (също от @andrey) се оказва почти същият начин за атакуване на проблема. Мисля, че ще мога да реализирам това, което искам, следвайки вашите предложения. - person Boinst; 09.10.2015