我陷入了Eclipse 4
RCP应用程序的一个问题。我需要记录一些事件。我需要以某种方式获得对记录器的引用。我知道如何使用来做到这一点IEclipseContext
,但是我仍然找不到在IEclipseContext
没有依赖注入的情况下如何获得的方法,而依赖注入无法在激活器中使用。有人知道吗,请问如何解决这个问题?
非常感谢
令人遗憾的是,没有IEclipseContext
注射就无法获得。关于如何在未附加到应用程序模型的类中使用eclipse 4
DI的答案中写道:
但是,问题在于,
IEclipseContext
已经需要将已经注入到可以访问需要注入的对象的类中。
尽管如此,我已经解决了日志记录的问题,但我认为,该原理通常有效。总会有一些服务提供您所需的东西。如果您不能使用依赖项注入,则必须以某种方式(Internet和实验通常是)获得适当的服务类名称。如果获得服务类名称,则可以从捆绑软件上下文中获取实例引用。幸运的是,无需使用注入即可访问包上下文。
回到我们的日志记录问题。正在搜索的类是org.osgi.service.log.LogService
:
public class Activator implements BundleActivator {
...
private static BundleContext context;
...
public static BundleContext getContext() {
return context;
}
...
public void start(BundleContext bundleContext) throws Exception {
ServiceReference<?> logser = bundleContext.getServiceReference(LogService.class);
LogService ls = (LogService)bundleContext.getService(logser);
//print an error to test it (note, that info can be below the threshold)
ls.log(LogService.LOG_ERROR, "The bundle is starting...");
Activator.context = bundleContext;
}
...
}
等等!
!ENTRY eu.barbucha.rcp-experiment.kernel 4 0 2013-08-20 07:32:32.347
!MESSAGE The bundle is starting...
就这样。以后Activator.getContext()
,如果需要,您可以使用来获得包上下文。
重要说明:很
遗憾,您现在无法降低阈值。JVM参数-Declipse.log.level
不会影响OSGI日志服务,您现在仅使用OSGI记录器。不幸的是,他们(可能已经临时地)对日志记录阈值进行了硬编码(请参阅eclipse
3.7中的如何记录警告和信息)。我发现,他们还没有修复它。开普勒版本中都没有。但是,您可以做出让步。您可以在可能的情况下进行
注入 。
最终解决方案(也可以全局捕获异常)
我扩展了激活器:
ServiceReference<?> logreser = bundleContext.getServiceReference(LogReaderService.class);
LogReaderService lrs = (LogReaderService) bundleContext.getService(logreser);
lrs.addLogListener(new LogListener() {
@Override
public void logged(LogEntry entry) {
System.err.println("Something was logged: " + entry.getMessage());
}
});
当ewew是记录在某处的内容时,确实会出现 以记录某事 开头的文本。但是,最大的好处是,此类是我的。我可以控制
日志条目还包含级别。我还可以轻松设置阈值。例如在命令行上。
问题内容: 我已经设置了PyCharm,创建了我的virtualenv(通过virtual env命令,或者直接在PyCharm中),并将那个环境激活为我的解释器。一切都很好。 但是,如果我使用“工具,打开终端”打开终端,则提供的shell提示未使用虚拟环境。我仍然必须在该终端内使用才能激活它。 另一种方法是在外壳中激活环境,然后从该环境运行PyCharm。这是“可行的”但很丑陋,这意味着如果我从
我收到一个错误。当我在谷歌上搜索时,我得到了一些结果,但它们都是针对Android编程的。我使用Windows,Java1.8和Selenium自动测试。 错误 我的原始代码(我没有写,但正在调试,并已工作): 我得到的错误是“没有这样的窗口”。所以我想我可能需要等到窗口数量稳定下来,所以我在点击后和执行windows操作之前添加了以下内容: 正是在这一点上,它进行切换,我得到了 正如我之前提到的
我对这一切都不熟悉,我已经尽我所能地遵循教程,我想尝试一下网络应用开发,但我显然在做什么或错过什么。 我在Atom终端上运行了pip install Django,它说安装成功,但发出了一个警告,说明我的安装文件不在路径中,尽管该文件实际上在路径上,但我相信我已经解决了这个问题。 然后,我尝试按照Django教程进行操作,该教程告诉我pip安装venv,我无法让它正常工作,但我确实在Atom At
问题内容: 我写了一个python程序。如果我有一个像这样的shebang: 然后使用以下命令使文件可执行: 我可以这样运行程序: 这是问题。我使用conda虚拟环境。当我运行上述程序时,系统会创建一个无法识别活动环境的子外壳: 但是如果我这样做的话… 如何指定在子Shell中使用的正确环境?可能吗?我希望省去输入六个字符串的麻烦。 另一篇文章,在conda托管环境中的Shebangs,简短地谈到
问题内容: 我在Windows 8上,使用Anaconda 1.7.5 64bit。 我创建了一个新的Anaconda环境 来自。 效果很好(有一个带有新python发行版的文件夹)。康达告诉我输入 激活环境,但是返回: 如何激活环境?我究竟做错了什么? 问题答案: 如果发生这种情况,则需要为您的环境设置PATH(以便从环境和Windows上的Scripts \中获取正确的Python)。 假设您
本文向大家介绍如何在dot net core中激活session功能?相关面试题,主要包含被问及如何在dot net core中激活session功能?时的应答技巧和注意事项,需要的朋友参考一下 首先要添加session包. 其次要在config service方法里面添加session。然后又在configure方法里面调用usesession。