Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在RCP插件中将log4j日志写入eclipse错误日志视图_Eclipse_Eclipse Plugin_Osgi_Eclipse Rcp_Osgi Bundle - Fatal编程技术网

如何在RCP插件中将log4j日志写入eclipse错误日志视图

如何在RCP插件中将log4j日志写入eclipse错误日志视图,eclipse,eclipse-plugin,osgi,eclipse-rcp,osgi-bundle,Eclipse,Eclipse Plugin,Osgi,Eclipse Rcp,Osgi Bundle,我已经使用log4j为定制日志API创建了一个eclipse RCP插件。 我的日志API仅打印控制台上的日志。我想在Eclipse错误日志视图中打印它们。 请建议如何在EclipseRCP插件中执行此操作 我尝试了iGlistner和StatusManager,但没有成功。 请给出一些关于这个用例的建议或示例代码 在这里,我编写自定义appender并将此appender添加到我的记录器中 public class VirtualConsole extends ConsoleAppender{

我已经使用log4j为定制日志API创建了一个eclipse RCP插件。 我的日志API仅打印控制台上的日志。我想在Eclipse错误日志视图中打印它们。 请建议如何在EclipseRCP插件中执行此操作

我尝试了iGlistner和StatusManager,但没有成功。 请给出一些关于这个用例的建议或示例代码

在这里,我编写自定义appender并将此appender添加到我的记录器中

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方法
(即LoggerService.info(“msg”)
)时,此消息都会被记录到控制台中,但我希望登录到eclipse错误视图中

我已经提到

注意:-客户端和服务都是OSGI包

更新:-
我有一个日志服务OSGI bundle,它将lo4j实例返回给另一个客户端OSGI bundle,然后客户端使用此服务进行日志记录。

我们在不久前创建了一个名为的库,用于将日志记录集成到Eclipse RCP应用程序中。它提供了几个扩展slf4j的特性,其中还有一个记录到错误视图的appender。您可以在中找到更多信息

因此,如果您可以选择使用slf4j和logback进行日志记录,那么您可以使用该库(如果不是,至少您可以将其作为一个可以遵循的示例;错误日志的实际日志记录发生在中)。log4j(和apachecommons日志等)有一个日志适配器,用于将log4j日志路由到slf4j,这就是您可以将它与当前日志集成的方式


下面是一个关于当前版本的捆绑包的示例,以防您要测试它(但不包括slf4j和logback捆绑包)。

您是否调试了在调用服务方法时是否实际调用了appender?是的,它正在调用,并且日志和状态显示在控制台中,但不显示在Eclipse错误日志中。在ErrorLogObserver中(如回答中所述)我使用Activator的日志(扩展AbstractUIPlugin),这可能会对使用StatusManager有所不同。但未成功。请推荐使用log4j和appenders的小用例,或者以某种方式将消息记录在eclipse错误日志中。我在一个服务中创建记录器实例,并使用osgi服务在另一个捆绑包中使用记录器api。