如何在Eclipse RCP应用程序中正确设置Logback?

时间:2013-10-08 05:01:24

标签: eclipse eclipse-rcp slf4j logback

我花了最近2或3天尝试在我的新Eclipse RCP项目中正确使用Logback。 (我第一次尝试使用RCP,但在其他java项目中使用了logback)。

我向大家提出的问题是:"是否有一个简单的Eclipse RCP(E4)插件来启用Logback日志记录?应该使用插件(http://logback.qos.ch/p2/)吗?如果没有一个简单的插件可供使用,启用此日志记录的正确方法是什么?"

我已多次阅读此页面(http://devblog.virtage.com/2012/07/logback-and-eclipse-attaching-logback-xml/)并且看起来很有希望,但我还没有能够让它发挥作用。

3 个答案:

答案 0 :(得分:1)

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

  • dependencies选项卡:add:org.slf4j.api,ch.qos.logback.classic ch.qos.logback.core
  • 构建标签,"二进制构建",检查文件" config / logback.xml"

在您的初始化类(由#34; lifeCycleURI"在plugin.xml中指向的类)中添加以下内容:

@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 (On sourceforge)

中的表现

答案 1 :(得分:0)

以下是我对RCP应用插件工作pom.xml的摘录:

<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存储库的问题。

答案 2 :(得分:0)

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

  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. 在classpath中的某个定义插件中创建一个logback.xml文件(如果使用Tycho / Maven,则为src / main / resources)。
  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应用程序,上面的代码进入了应用程序插件的Activator的start()方法。

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