gpt4 book ai didi

java - LoggerFactory 无法获取 Logger

转载 作者:行者123 更新时间:2023-11-29 04:14:07 25 4
gpt4 key购买 nike

我目前正在实现一个记录器,我想知道为什么代码无法运行。大多数代码片段都是这样的:

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。

这是为什么?

提前致谢! No getLogger() classes are available

最佳答案

Hereorg.osgi.service.log.LoggerFactory的源码。

如您所见,它是一个没有静态方法的接口(interface),因此这段代码:

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 为任何类获取 Logger:

Logger logger = loggerFactory.getLogger(Foo.class);

更新 2

更好的选择是像这样获取服务类型为 LoggerFactory 的引用:

@Reference(service = LoggerFactory.class)
private Logger logger;

关于java - LoggerFactory 无法获取 Logger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53408718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com