如何将log4j日志写入RCP插件

时间:2017-04-03 12:38:57

标签: eclipse eclipse-plugin osgi eclipse-rcp osgi-bundle

我使用log4j为自定义Logging API创建了一个eclipse RCP插件。 我的日志记录API仅在控制台上打印日志。我想在Eclipse Error Log View中打印它们。 请在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实例返回给另一个Client OSGI包,然后客户端使用这个服务进行记录。

1 个答案:

答案 0 :(得分:1)

我们之前创建了一个名为slf4j-plus的库,用于将日志记录集成到Eclipse RCP应用程序hale studio中。它提供了一些扩展slf4j的功能,其中还包括一个记录到错误视图的appender。您可以在documentation

中找到更多信息

因此,如果您可以选择使用slf4j和logback进行日志记录,则可以使用该库(如果没有,至少可以使用它作为您可以遵循的示例;实际记录到错误日志中的是ErrorLogObserver)。 log4j(以及Apache commons日志记录等)的日志记录适配器将log4j日志记录路由到slf4j,这是您可以将它与当前日志记录集成的方式。

这是一个p2 repository / update site,其中包含当前版本的软件包,以防您要测试它(不包括slf4j和logback软件包)。