LoggerFactory 无法获取 Logger
LoggerFactory cannot getLogger
我目前正在实现一个记录器,我想知道为什么代码不会 运行。
大多数代码片段是这样的:
Logger log = LoggerFactory.getLogger(this.getClass());
我导入的 类:
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogReaderService;
import org.osgi.service.log.LogService;
import org.osgi.service.log.Logger;
import org.osgi.service.log.LoggerFactory;
但我似乎无法使用 getLogger。
这是为什么?
提前致谢!
Here是org.osgi.service.log.LoggerFactory
的源代码。
如您所见,它是一个没有静态方法的接口,因此此代码:
Logger log = LoggerFactory.getLogger(this.getClass());
根本无效。
要解决此问题,请使用 slf4j
作为前端(这意味着将 org.osgi.service.log.LoggerFactory
导入替换为 org.slf4j.LoggerFactory
等)。
更新
如果你想坚持使用 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 为任何 class:
获取记录器
Logger logger = loggerFactory.getLogger(Foo.class);
更新2
一个更好的选择是获取服务类型为 LoggerFactory 的参考,如下所示:
@Reference(service = LoggerFactory.class)
private Logger logger;
LoggerFactory 是一个 OSGi 服务。您需要从 OSGi 服务注册表中获取它。有关详细信息,请参阅 my EclipseCon Europe 2018 presentation。
我目前正在实现一个记录器,我想知道为什么代码不会 运行。 大多数代码片段是这样的:
Logger log = LoggerFactory.getLogger(this.getClass());
我导入的 类:
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogReaderService;
import org.osgi.service.log.LogService;
import org.osgi.service.log.Logger;
import org.osgi.service.log.LoggerFactory;
但我似乎无法使用 getLogger。
这是为什么?
提前致谢!
Here是org.osgi.service.log.LoggerFactory
的源代码。
如您所见,它是一个没有静态方法的接口,因此此代码:
Logger log = LoggerFactory.getLogger(this.getClass());
根本无效。
要解决此问题,请使用 slf4j
作为前端(这意味着将 org.osgi.service.log.LoggerFactory
导入替换为 org.slf4j.LoggerFactory
等)。
更新
如果你想坚持使用 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 为任何 class:
获取记录器Logger logger = loggerFactory.getLogger(Foo.class);
更新2
一个更好的选择是获取服务类型为 LoggerFactory 的参考,如下所示:
@Reference(service = LoggerFactory.class)
private Logger logger;
LoggerFactory 是一个 OSGi 服务。您需要从 OSGi 服务注册表中获取它。有关详细信息,请参阅 my EclipseCon Europe 2018 presentation。