Eclipse PDE和log4j.properties?

时间:2010-08-26 08:58:10

标签: eclipse log4j eclipse-pde

我创建了一个eclipse PDE项目,并使用slf4j-api和slf4j.log4j12包添加了log4j作为依赖项。在一个课程中,我创建了记录器:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyTest {

  private static final Logger logger = LoggerFactory.getLogger(MyTest.class
      .getName());

  public void tt() {
    logger.info("log-test");

  }

}

但是当我使用OSGI启动配置运行PDE项目时,我收到警告:

log4j:WARN No appenders could be found for logger (loggin_test.MyTest).
log4j:WARN Please initialize the log4j system properly.

基于此信息:

http://jaikiran.wordpress.com/2006/07/05/i-get-log4jwarn-no-appenders-could-be-found-for-logger-message-2/

我需要将log4j.properties放在PDE类路径中。我试图把它放在PDE项目的根目录中并添加:

source.. = src/
output.. = bin/
bin.includes = META-INF/,\
               .,\
               log4j.properties

到build.properties窗格。但我仍然得到同样的警告。我在哪里将log4j.properties文件放在PDE项目中?

编辑:我也尝试将其添加到/ src文件夹,但它没有帮助。

5 个答案:

答案 0 :(得分:2)

您已经遇到了OSGi的第一个资源可见性问题。请记住,在OSGi包中必须明确定义它们的依赖项。您的问题是您的bundle定义了一个log4j属性文件,但它是必须读取它的log4j包。但是log4j包对你的包没有任何了解(也不应该知道)。

这是问题的两个解决方案:

  1. 使用Eclipse的好友机制
  2. 将log4j属性文件放在OSGi片段中并将其托管在log4j软件包
  3. 选项2是一个更好的解决方案,但如果您更容易找到选项1,那么请继续使用。

答案 1 :(得分:0)

AFAIK,你仍然需要Log4j JAR,因为SLF4J只是它的包装。从Apache web site下载JAR,将其添加到您的构建路径,它应该可以正常工作。

答案 2 :(得分:0)

我遇到了同样的问题。将包含log4j.xml的文件夹添加到Project Build Path是不够的(为什么不呢?)。无论如何,除了原因之外(也许eclipse大师可以为我们解答)我解决了我的问题,将包含log4j.xml的文件夹添加到eclipse“运行配置”。

在您第一次尝试运行独立应用程序并获得令人讨厌的“无法找到记录器的附加程序”消息后,请按照以下步骤操作:

  1. 转到菜单“运行”> “运行配置”
  2. 您的主要课程应该出现在左侧树的某个位置。可能在“Java Application”下。所以选择它
  3. 选择“Classpath”选项卡,选择“User Entries”并单击“Advanced”按钮。
  4. 在“高级选项”弹出窗口中,选择“添加文件夹”,然后单击“确定”按钮。
  5. 在“文件夹选择”弹出窗口中,导航到log4j.xml所在的文件夹,然后单击“确定”btn。
  6. 点击“运行”按钮......然后......终于!

答案 3 :(得分:0)

当我尝试使用slf4j-simple转换为slf4j-log4j12(同时添加log4j jar)时,我遇到了同样的情况。在进行一些调试之后,就像SteveD提到的那样,问题是资源可见性的结果。在我的情况下,我有一个插件,其中包含我的日志库;但是,我不想在共享插件中指定我的日志属性。

我的方法可能适用于您的情况,即为每个希望具有日志记录功能的插件提供日志记录配置。对于需要记录的插件,我会在插件的激活器中添加如下内容:

Bundle bundle = bundleContext.getBundle();
URL entry = bundle.getEntry("log4j.properties");

try(InputStream inputStream = entry.openStream())
{
    PropertyConfigurator.configure(inputStream);
}
catch(IOException e) {}

尽管不幸的是需要将代码添加到激活器中;我能够为每个插件配置不同的日志记录功能,我没有必要处理新的插件/ Eclipse伙伴注册,也没有必要处理在任何manifest或build.properties文件中管理log4j.properties文件。

其他笔记

  • 当出现失败初始化消息时(“请正确初始化log4j系统”),它只会出现一次。当我没有检测到两(2)个插件配置不正确但只显示一(1)个错误消息时,这给我一些困惑。

答案 4 :(得分:0)

为什么不使用 platform logging facility

我最近在Eclipse插件中添加了日志记录。我使用了PDE中内置的日志工具。我会发布这个以防万一这个选项被忽略了。我没有意识到我最初不需要添加log4j,也许其他人也没有意识到这一点。