Eclipse PDE日志记录 [英] Eclipse PDE Logging

查看:133
本文介绍了Eclipse PDE日志记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将我的插件的异常发送到错误日志,但我不希望它们在Eclipse控制台中显示。这是我正在做的。



首先,我实现了ILogListener。

  public class MyILogListener implements ILogListener {

@Override
public void logging(IStatus status,String plugin){
System.out.println logging:+ plugin);

}

}

我有这个示例操作做测试。

  public void run(IAction action){

ILogListener iL = new MyILogListener();
Platform.addLogListener(iL);

Bundle bundle = Platform.getBundle(test.Activator.PLUGIN_ID);
ILog log = Platform.getLog(bundle);
Object o = null;
try {
o.equals(sk);
} catch(Exception e){
log.log(new Status(Status.ERROR,test.Activator.PLUGIN_ID,test,e));


}

}

异常写在Eclipse应用程序的错误日志中,这在控制台中显示。

  java.lang.NullPointerException 
at test.actions.SampleAction.run(SampleAction.java:52)
在org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251)$在org.eclipse.face.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
在org.eclipse.jface.action.ActionContributionItem.access $ 2(ActionContributionItem.java:501)
在org.eclipse.jface.action.ActionContributionItem $ 5.handleEvent(ActionContributionItem.java:411)
在org。 eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
在org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
在org.eclipse.swt。 widgets.Display.runDeferre dEvents(Display.java:3588)
在org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209)
在org.eclipse.ui.internal.Workbench.runEventLoop(Workbench。 java:2696)
在org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
在org.eclipse.ui.internal.Workbench.access $ 4(Workbench.java:2494 )
在org.eclipse.ui.internal.Workbench $ 7.run(Workbench.java:674)
在org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
在org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
在org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
在org .eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
在org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
在org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
在org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.st art(EclipseAppLauncher.java:79)
在org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
在org.eclipse.core.runtime.adaptor.EclipseStarter。 run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun。 reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(Method.java:616)
在org.eclipse.equinox.launcher.Main.invokeFramework( Main.java:622)
在org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
在org.eclipse.equinox.launcher.Main.run(Main.java: 1410)
在org.eclipse.equinox.launcher.Main.main(Main.java:1386)

logging:org.eclipse.core.runtime



您可以看到MyILogListener正在打印org.eclipse.core.runtime,我以为会打印我的插件ID,这是测试。此外,在我的实现中,我没有写任何东西到日志,但异常出现在错误日志中。我只想在错误日志中写入异常,而不是在控制台中显示。



我做错了什么?我正在尝试使用Eclipse 3.7.0和3.7.1。

解决方案

根据 Eclipse 3.7文档


所有eclipse日志记录API现在通过名为org.eclipse.equinox.logger的org.eclipse.equinox.log.Logger进行聚合。所有ILogListener实例将被通知通过此记录器记录的条目。


这意味着通过登录到捆绑包的日志,一堆监听器将被通知,其中一个是Eclipse StatusManager 将状态记录到错误日志。



如果您只想记录到Eclipse错误日志(和错误日志视图),那么您应该直接调用 StatusManager.handle()方法之一。


I want to send the exceptions of my plugin to the Error Log, but I don't want them to be shown in the Eclipse console. This is what I am doing.

First, I implemented ILogListener.

public class MyILogListener implements ILogListener {

    @Override
    public void logging(IStatus status, String plugin) {
        System.out.println("logging: " + plugin);

    }

}

I have this sample Action to do the test.

public void run(IAction action) {

    ILogListener iL = new MyILogListener();
    Platform.addLogListener(iL);

    Bundle bundle = Platform.getBundle(test.Activator.PLUGIN_ID);
    ILog log = Platform.getLog(bundle);
    Object o = null;
    try {
        o.equals("sk");
    } catch (Exception e) {
        log.log(new Status(Status.ERROR, test.Activator.PLUGIN_ID, "test", e));


    }

}

The exception is written in the Error Log of the Eclipse aplication and this is shown in the console.

java.lang.NullPointerException
at test.actions.SampleAction.run(SampleAction.java:52)
at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251)
at org.eclipse.ui.internal.WWinPluginAction.runWithEvent(WWinPluginAction.java:229)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
at org.eclipse.equinox.launcher.Main.main(Main.java:1386)

logging: org.eclipse.core.runtime

You can see the MyILogListener is printing "org.eclipse.core.runtime", I thought it would print my plugin ID, which is "Test". Also, in my implementation I'm not writing anything to the log, but the exception appears in the Error Log. I only want to write the exception in the Error Log, and not show it in the console.

What I am doing wrong? I'm trying this with Eclipse 3.7.0 and 3.7.1.

解决方案

According to Eclipse 3.7 documentation:

All eclipse logging APIs are now aggregated through the org.eclipse.equinox.log.Logger with the name org.eclipse.equinox.logger. All ILogListener instances will be notified of entries logged through this logger.

This means that by logging to a bundle's log a bunch of listeners will be notified, one of them being Eclipse StatusManager which logs the status to error log.

If you only want to log to Eclipse error log (and Error Log view) then you should call one of StatusManager.handle() methods directly.

这篇关于Eclipse PDE日志记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆