代码之家  ›  专栏  ›  技术社区  ›  u123

Eclipse PDE和log4j.properties?

  •  3
  • u123  · 技术社区  · 15 年前

    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
    

    到内部版本.属性窗格。但我还是得到了同样的警告。在PDE项目中,log4j.properties文件应该放在哪里?

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

    5 回复  |  直到 10 年前
        1
  •  2
  •   SteveD    15 年前

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

    这里有两种解决方案:

    1. 将log4j属性文件放在OSGi片段中,并将其托管在log4j包中

    选项2是一个更好的解决方案,但如果你觉得选项1更容易,那么就这样做。

        2
  •  0
  •   zvikico    15 年前

    Apache web site ,将它添加到构建路径中,它应该可以正常工作。

        3
  •  0
  •   L. Holanda    14 年前

    我也有同样的问题。将包含log4j.xml的文件夹添加到项目生成路径是不够的(为什么不呢?)。无论如何,除了这个原因(也许eclipse专家可以为我们解答这个问题)之外,我还解决了将包含log4j.xml的文件夹添加到eclipse“运行配置”中的问题。

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

    1. 进入菜单“运行”>“运行配置”
    2. 你的主类应该出现在左树的某个地方。可能在“Java应用程序”下。所以选择它
    3. 在“高级选项”弹出窗口中,选择“添加文件夹”,单击“确定”按钮。
    4. 在“文件夹选择”弹出窗口中,导航到log4j.xml所在的文件夹,然后单击“确定”按钮。
    5. 点击“运行”按钮。。。还有。。。终于!
        4
  •  0
  •   jdknight    11 年前

    slf4j-simple slf4j-log4j12 (在添加 log4j 罐子)。在做了一些调试之后,正如SteveD提到的,这个问题是资源可见性的结果。在我的情况下,我有一个保存日志库的插件;但是,我不想在共享插件中指定日志属性。

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

    Bundle bundle = bundleContext.getBundle();
    URL entry = bundle.getEntry("log4j.properties");
    
    try(InputStream inputStream = entry.openStream())
    {
        PropertyConfigurator.configure(inputStream);
    }
    catch(IOException e) {}
    

    其他注意事项

    • 当出现初始化失败消息(“请正确初始化log4j系统”)时,它只出现一次。这给了我一些困惑,起初当我没有发现两(2)个插件配置不正确,但只有一(1)个错误消息显示。
        5
  •  0
  •   Nathan Tuggy TonyLuigiC    8 年前

    为什么不使用 platform logging facility ?