【发布时间】:2017-08-28 08:05:00
【问题描述】:
我使用 log4j 为自定义 Logging API 创建了一个 Eclipse RCP 插件。 我的日志记录 API 仅在控制台上打印日志。我想在 Eclipse 错误日志视图中打印它们。 请建议如何在 Eclipse RCP 插件中执行此操作。
我尝试了 ILogListner 和 StatusManager 但未能成功。 请就这个用例给出一些建议或示例代码。
我在这里编写自定义 appender 并将这个 appender 添加到我的 Logger。
public class VirtualConsole extends ConsoleAppender{
@Override
public void append(LoggingEvent event) {
int level = IStatus.INFO;
if (event.getLevel().equals(Level.ERROR))
level = IStatus.ERROR;
IStatus status = new Status(level, event.categoryName,event.getMessage().toString());
StatusManager.getManager().handle(status, StatusManager.LOG|StatusManager.SHOW);
//and the normal logging
super.append(event);
}
}
LoggerService.java
private static Logger LOGGER = Logger.getLogger(LoggerService.class.getName());
VirtualConsole v = new VirtualConsole();
LOGGER.addAppender(v);
我的 log4j.properties 文件
#Define root logger options
log4j.rootLogger=debug, console
#Define console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
logrj.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %c{1} - %m%n
LoggerService 是一个 OSGI 服务,它是一个基于 log4j 的自定义记录器服务。
我有一个使用这个 LoggerService 并使用 log 方法的客户端代码。
每当客户端调用任何 LoggerService 方法 (i.e loggerService.info("msg") 时,此消息都会记录到控制台中,但我想登录 eclipse 错误视图。
我已经推荐了eclipse plugin development: error logging in log4j to error view
注意:- 客户端和服务都是 OSGI 包。
更新:- 我有 Logger Service OSGI 包,它将 lo4j 实例返回到另一个客户端 OSGI 包,然后客户端使用此服务进行日志记录。
【问题讨论】:
-
在调用服务方法时,如果你的appender被实际调用,你调试了吗?
-
是的,它正在调用,日志和状态显示在控制台中,但不在 Eclipse 错误日志中。
-
在 ErrorLogObserver 中(如答案中所述)我使用激活器的日志(扩展 AbstractUIPlugin),这可能对使用 StatusManager 有所不同。
-
我尝试使用 Activator.getDefaut().getLog()。但没有成功。请云您建议使用 log4j 和 appenders 的小用例或以某种方式在 eclipse 错误日志中记录消息。我在一个服务中创建记录器实例,并使用 osgi 服务在另一个包中使用记录器 API。
标签: eclipse eclipse-plugin osgi eclipse-rcp osgi-bundle