3

我创建了一个 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 文件夹,但它没有帮助。

4

5 回答 5

2

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

这里有2个问题的解决方案:

  1. 使用 Eclipse 的好友机制
  2. 将 log4j 属性文件放在 OSGi 片段中并将其托管在 log4j 包中

选项 2 是一个更好的解决方案,但如果您发现选项 1 更容易,那就去吧。

于 2010-08-26T11:39:56.903 回答
0

我遇到了同样的问题。将包含 log4j.xml 的文件夹添加到项目构建路径是不够的(为什么不呢?)。无论如何,除了那个原因(也许 eclipse 大师可以为我们回答)我解决了我的问题,将包含 log4j.xml 的文件夹添加到 eclipse“运行配置”中。

在您第一次尝试运行独立应用程序并收到烦人的“No appenders could be found for logger”消息后,请按照以下步骤操作:

  1. 转到菜单“运行”>“运行配置”
  2. 你的主类应该出现在左边树的某个地方。可能在“Java 应用程序”下。所以选择它
  3. 选择“类路径”选项卡,选择“用户条目”并单击“高级”按钮。
  4. 在“高级选项”弹出窗口中,选择“添加文件夹”,单击“确定”按钮。
  5. 在“文件夹选择”弹出窗口中,导航到 log4j.xml 所在的文件夹,然后单击“确定”btn。
  6. 单击“运行”按钮……然后……终于!
于 2010-10-27T18:13:24.300 回答
0

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

于 2010-08-26T11:21:25.077 回答
0

当我尝试从使用转移slf4j-simpleslf4j-log4j12(添加log4j罐子时)时,我也遇到了同样的情况。在进行了一些调试之后,正如 SteveD 所提到的,问题是资源可见性的结果。在我的情况下,我有一个插件来保存我的日志库;但是,我不想在共享插件中指定我的日志记录属性。

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

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

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

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

其他注意事项

  • 当出现 failed-to-initialize 消息(“请正确初始化 log4j 系统”)时,它只会出现一次。起初,当我没有检测到两 (2) 个插件配置不正确但只显示一 (1) 个错误消息时,这让我有些困惑。
于 2013-10-16T18:08:25.650 回答
0

为什么不使用平台日志功能

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

于 2017-09-12T19:04:29.533 回答