我花了最近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/)并且看起来很有希望,但我还没有能够让它发挥作用。
答案 0 :(得分:1)
非常简单。
将您的logback.xml文件放在目录/ config中(或插件中的任何位置)
在您的插件项目(plugin.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)。步骤是:
对于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);
}
对于Eclipse 3.x应用程序,上面的代码进入了应用程序插件的Activator的start()
方法。
您可能希望使用文件追加器,因为除非您使用-consoleLog作为程序参数,否则不会显示标准输出。如果将文件位置指定为<file>${user.dir}/path/to/file</file>
,则将在应用程序安装目录中创建该文件。通常,您将使用工作空间元数据目录,以便它与Eclipse日志一起使用,例如<file>${user.dir}/workspace/.metadata/rcp.log</file>
。