【问题标题】:How to write log4j logs into eclipse Error Log View in RCP plugin如何将 log4j 日志写入 RCP 插件中的 Eclipse 错误日志视图
【发布时间】: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


【解决方案1】:

我们前段时间创建了一个名为slf4j-plus 的库,用于将日志记录集成到Eclipse RCP 应用程序hale studio。它提供了一些扩展 slf4j 的特性,其中还有一个记录到错误视图的附加程序。您可以在documentation找到更多信息。

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

这里有一个 p2 repository / update site 包含当前版本的捆绑包,以防您想测试它(但不包括 slf4j 和 logback 捆绑包)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-18
    • 2016-08-02
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    相关资源
    最近更新 更多