4

在过去的 2 或 3 天里,我一直试图让 Logback 在我的新 Eclipse RCP 项目中正常工作。(我是第一次尝试 RCP,但在其他 java 项目中使用过 logback)。

我对你们所有人的问题是:“是否有一个用于 Eclipse RCP (E4) 的简单插件来启用 Logback 日志记录?是否应该使用这里的插件 ( http://logback.qos.ch/p2/ )?如果有不是一个简单的插件,启用此日志记录的正确方法是什么?”

我已经读过这个页面(http://devblog.virtage.com/2012/07/logback-and-eclipse-attaching-logback-xml/)很多次了,看起来很有希望,但我没能得到它工作。

4

3 回答 3

4

我已经设法获得了一个适用于 RCP 3.x 和 4.x 的 logback 工作配置。我正在使用 Tycho 构建,并使用功能和产品来组装应用程序(有关详细信息,请参阅Vogella 教程)。步骤是:

  1. 在定义插件(通常是包含应用程序的插件)中,将依赖项添加到 ch.qos.logback.classic 和 ch.qos.logback.core 以及 org.slf4j.api。所有其他插件只需要依赖 org.slf4j.api 来访问记录器。
  2. 在包含定义插件的功能中,在 Included PLug-ins 页面上添加 ch.qos.logback.slf4j 片段。没有这个,SLF4J 将无法在部署的产品中找到 Logback。
  3. 在类路径中的某个位置(如果您使用 Tycho/Maven,则为 src/main/resources)在定义插件中创建一个 logback.xml 文件。
  4. 对于 e4 应用,添加生命周期管理器,并在其 @ProcessAdditions 方法中初始化 Logback:

    ILoggerFactory iLoggerFactory = LoggerFactory.getILoggerFactory();  
    LoggerContext loggerContext = (LoggerContext) iLoggerFactory;  
    loggerContext.reset();  
    JoranConfigurator configurator = new JoranConfigurator();  
    configurator.setContext(loggerContext);  
    try {  
      configurator.doConfigure(getClass().getResourceAsStream("/logback.xml"));  
    } catch (JoranException e) {  
      throw new IOException(e.getMessage(), e);  
    }  
    
  5. 对于 Eclipse 3.x 应用程序,上述代码进入start()应用程序插件的 Activator 方法。

您可能希望使用文件附加程序,因为除非您使用 -consoleLog 作为程序参数,否则不会显示标准输出。如果您将文件位置指定为<file>${user.dir}/path/to/file</file>,则该文件将在应用程序安装目录中创建。通常您会使用工作区元数据目录,以便它位于 Eclipse 日志旁边,例如<file>${user.dir}/workspace/.metadata/rcp.log</file>.

于 2016-04-07T22:53:46.220 回答
1

非常简单。
将您的 logback.xml 文件放在目录 /config 中(或插件内的任何位置)
在您的插件项目 (plugin.xml) 中,执行以下操作。

  • 依赖项选项卡:添加:org.slf4j.api,ch.qos.logback.classic ch.qos.logback.core
  • 构建选项卡,“二进制构建”,检查文件“config/logback.xml”

在您的初始化类(plugin.xml 中的“lifeCycleURI”指向的类)中添加以下内容:

@PostContextCreate
public void init()
   ...
   SLF4JConfigurator.configure();
   ...
}

SLF4JConfigurator 类:

public final class SLF4JConfigurator {

private static final String BUNDLE_NAME = FrameworkUtil.getBundle(SLF4JConfigurator.class).getSymbolicName();
private static final String LOGBACK_XML = "platform:/plugin/" + BUNDLE_NAME + "/config/logback.xml";

public static void configure() {

  // Reset Current SLF4J config
  JoranConfigurator configurator = new JoranConfigurator();
  LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
  configurator.setContext(loggerContext);
  loggerContext.reset();

  // Read Configuration file
  try {
     URL configFile = new URL(LOGBACK_XML);
     InputStream configurationStream = configFile.openStream();
     configurator.doConfigure(configurationStream);
     configurationStream.close();
  } catch (JoranException | IOException e) {
     // Problem when reading file...
     e.printStackTrace();
  }
  StatusPrinter.printInCaseOfErrorsOrWarnings(loggerContext);

  // Confirm message
  Logger logger = LoggerFactory.getLogger(SLF4JConfigurator.class);
  logger.info("Logging configuration initialised.");
}
}

在“产品”定义中包含 3 个依赖项。如果您使用 tycho 构建,来自 eclipse 的 slf4j+logback 插件插件将自动与您的应用程序捆绑在一起,无需添加到您的 pom 文件中。
这就是我在 JMSToolBox中的做法(在 sourceforge 上)

于 2016-04-08T16:32:35.043 回答
0

这是我pom.xml对 RCP 应用程序插件工作的摘录:

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
    <groupId>es.fcc.rds</groupId>
  <artifactId>fcc.ima.oda</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  <packaging>eclipse-plugin</packaging>
  <properties>
    <tycho.version>0.19.0</tycho.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <repositories>
    <repository>
      <id>eclipse</id>
      <url>http://download.eclipse.org/releases/kepler</url>
      <layout>p2</layout>
    </repository>
    <repository>
      <id>logback</id>
      <url>http://logback.qos.ch/p2/</url>
      <layout>p2</layout>
    </repository>
  </repositories>
  ....

如您所见,我正在使用http://logback.qos.ch/p2/存储库。

注意:经过几个月的正常工作后,它现在间歇性地失败,可能是由于 p2 存储库的问题。

于 2015-01-15T11:29:51.843 回答