Я работаю с OSGi и декларативными сервисами (DS) и в настоящее время думаю о том, как правильно вести журнал. Поскольку я все равно работаю с DS, кажется естественным использовать LogService, указанный в сборнике сервисов OSGi, в качестве обязательной ссылки на сервис. Я много читал в сети на угол ekkes и блог nogunners, но что-то мне до сих пор непонятно:
Как правильно различать разные сервисные компоненты (или разные экземпляры сервисных компонентов при использовании факторизованных компонентов)?
Если я посмотрю на реализацию LogListener nogunners с использованием Logback, он использует форму Bundle-Id из контекста пакета, чтобы различать их. Хорошо, пока. Но как бы я различал сервисные компоненты? Объект LogService естественно содержит ссылку на BundleContext, но (смотря в интерфейс LogService) ServiceReference должен быть предоставлен самим пользователем (тот, кто действительно что-то регистрирует)? Мне это кажется хрупким. Почему фреймворк не может предоставить это, поскольку он предоставляет BundleContext?
И пока я на этом, почему спецификация OSGi использует многословный logger.log(LogService.LOG_INFO,...)
вместо квазистандартного logger.info(...), logger.warn(..)
и т. д.? Есть ли какая-то конкретная причина для этого?