当前位置: 首页 > 面试题库 >

登录Eclipse / OSGi插件

濮阳品
2023-03-14
问题内容

我开始开发Eclipse插件(从技术上讲,是OSGi插件),遇到的第一个问题是我似乎无法像往常一样控制commons-logging输出。

我在插件依赖项中包含了commons-
logging包,的确,当我记录某些信息(信息为INFO或更高严重性)时,它会记录到控制台。但是,我似乎无法以任何较低级别登录(例如DEBUG或TRACE)。

我已经指定了一个log4j.properties文件,它位于类路径上(对于运行时,就像commons-
logging包一样),但是该属性文件中的任何设置都不会影响记录器的行为。

这是log4j.properties文件:

#  Log4j Logging levels, in order of decreasing importance are:
#   FATAL, ERROR, WARN, INFO, DEBUG, TRACE
#

# Root logger option
log4j.rootLogger=ERROR,stdout
#,LOGFILE

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %r (%l) %t%n - %m%n

我需要怎么做才能真正控制记录仪的输出?

以下是一些示例输出消息,希望其格式设置可能与java.util.logging的默认设置一致,或者向其他人提供其他提示:

Oct 21, 2008 11:01:23 PM com.stottlerhenke.sentinel.client.Activator start
SEVERE: fatal_message
Oct 21, 2008 11:01:23 PM com.stottlerhenke.sentinel.client.Activator start
WARNING: warn_message
Oct 21, 2008 11:01:23 PM com.stottlerhenke.sentinel.client.Activator start
INFO: info_message

更新:

我现在尝试了以下各种组合:

  • org.osgi.service.log.LogService等。
  • slf4j
  • Log4J
  • 公共记录
  • java.util.logging

如果我从提示手动运行OSGi,则 只能
得到DEBUG或更低级别的消息出现(这对我正在开发的内容不切实际)。此外,我无法通过各种属性文件来实现任何其他类型的日志记录配置。我在这方面尝试的一切似乎都被日食设置所覆盖。

我也试图把各种配置文件用于上述库在许多地方,包括作为插件安装到各自库的建议片段在这里,静静的,相同的结果发生。

我已经实现了一个自定义的LogListener,并使用System.out.println跟踪了一条日志消息的整个路径(无论如何我也知道如何),并且调试消息
一直 存在,直到它们被任何底层的日志记录API输出为止我正在使用,然后它们消失了。


问题答案:

3天后…

我发现了问题!我需要做两件事,首先,一个MANIFEST.MF文件存在问题:

我在MANIFEST.MF中具有以下捆绑包:

Bundle-ClassPath: lib/jena.jar,
 .,
 org.apache.log4j-1.2.12.jar,
 lib/google-collect-snapshot.jar
Import-Package: com.acme.client.translation,
 com.acme.translation.interfaces,
 com.acme.shared.osgi,
 com.acme.utilities

应该 一直这样的:

Bundle-ClassPath: lib/jena.jar,
 .,
 lib/google-collect-snapshot.jar
Import-Package: com.acme.client.translation,
 com.acme.client.translation.interfaces,
 com.acme.shared.osgi,
 com.acme.utilities,
 org.apache.log4j

关键的不同之处在于,log4j应该作为软件包使用,而它却被用作软件包。(我从当我预期的Log4j“只是工作”使用OSGi在我的lib目录一个log4j的罐子。)的罐子

的工作,排序的。它显然找到了一些eclipse级的log4j配置,并加以利用。由于它只是一个罐子(不是捆绑包),因此它没有使用任何可以指定自定义日志记录配置的片段,这导致我们不得不进行另一件事:

我需要设置一个捆绑片段来指定日志记录配置。
此链接从VonC给我的信息,以做到这一点。不幸的是,这需要做很多事情,带有不正确MANIFEST.MF的程序包仍然在Bundle-
ClassPath中指定了log4j jar,并且似乎覆盖了Import-Package列表。

我终于弄清楚了当我需要登录另一个捆绑软件时发生了什么(到此为止,我刚刚放弃了,回到了警告级别或更高级别使用日志。)这个新捆绑软件找不到日志配置。
!(因此,我在同一个OSGi环境中运行了三个捆绑软件,每个捆绑软件具有不同的log4j行为-
一个捆绑软件使用我的片段设置,另一个捆绑软件使用一些随机的Eclipse日志记录设置,最后是没有任何日志配置的新捆绑软件。)这三个捆绑软件的详细比较显示了Manifest.MF文件中的差异,现在它们都使用了片段捆绑软件。



 类似资料:
  • 我按照下一页上的说明将primefaces jar库转换为OSGi插件,并将其添加为OSGi捆绑包中必需的插件之一。http://www.vogella.com/tutorials/EclipseJarToPlugin/article.html#jar-files-without-osgi-meta-data 然而,当我部署OSGi捆绑包,我<有限公司 这是我得到的堆栈跟踪,以防错误是由于其他原因

  • 我有两个Java模块,A和B。A提供了一个核心模型,其中包含JAXB注释和帮助器类,用于创建JAXB内容(创建上下文、编组、解组等)。B提供了其他类,这些类通过@xmlanyement(lax=true)包含在模型中,因此必须添加到JAXB上下文中。 这在普通Java-B的classloader中运行良好,它可以看到所有相关的类,并可以使用以下内容实例化JAXB上下文: 现在我正在尝试使用OSGI

  • 以下是安装jBPM插件的先决条件 - Java 1.5(或更高版本)SE JDK Eclipse 4.2或任何版本和jBPM插件 由于jBPM是用Java编写的,因此我们将介绍如何在本节中添加所需的插件。 考虑到最大的Java用户使用Eclipse,让我们看看如何在Eclipse中添加jBPM插件。 从以下链接下载二进制文件 - http://download.jboss.org/drools/r

  • PyDev是Eclipse IDE的开源插件,可以在Python,Jython以及IronPython中开发项目。 它托管在https://pydev.org 。 下面给出了在Eclipse IDE中安装PyDev插件的分步过程。 Step 1 - 打开Eclipse IDE并从“帮助”菜单中选择“ Install New Software选项。 Step 2 - 在带有标签的工作前的文本框中输入

  • 我试图与eclipse部署osgi bundle 如果我出口与eclipse插件(出口- 我的清单: 我的build.properties: 没什么特别的,简单的OSGI捆绑包。eclipse和Jboss - OSGI出了点问题。有没有人知道出了什么问题? Update1: jar的样子:

  • 我使用EclipseIndigo使用OSGiJava框架开发了一些包。有一个主捆绑包,它依赖于其他捆绑包,并且具有要运行的主程序。如果我尝试在Eclipse中运行所有捆绑包,一切都正常工作,但是如果我将每个捆绑包保存为一个JAR,并在命令行中启动OSGi框架,当我尝试启动主捆绑包时,会出现异常<code>NoClassDefFoundError。找不到的类是依赖项。包的其余部分处于活动状态,主包刚