Здесь - исходный код org.osgi.service.log.LoggerFactory
.
Как видите, это интерфейс без статических методов, поэтому этот код:
Logger log = LoggerFactory.getLogger(this.getClass());
просто недействительно.
Чтобы исправить это, используйте slf4j
в качестве внешнего интерфейса (это означает замену org.osgi.service.log.LoggerFactory
import на org.slf4j.LoggerFactory
и т. д.).
UPDATE
Если вы хотите придерживаться org.osgi.service.log.LoggerFactory
, следуйте this :
Получите экземпляр LoggerFactory:
public class Activator implements BundleActivator
{
private volatile LoggerFactory loggerFactory;
public void start(BundleContext context) throws Exception
{
ServiceReference ref = context.getServiceReference(LoggerFactory.class.getName());
if (ref != null)
{
loggerFactory = (LoggerFactory) context.getService(ref);
}
}
//..
В другом месте в комплекте вызатем можно использовать LoggerFactory, чтобы получить Logger для любого класса:
Logger logger = loggerFactory.getLogger(Foo.class);
UPDATE2
Лучшей альтернативой было бы получить ссылку на тип службы LoggerFactory, подобныйэто:
@Reference(service = LoggerFactory.class)
private Logger logger;