Discussion:
Eclipse OSGi Implementierung - Konsolen Zugriff
(zu alt für eine Antwort)
Oliver Haupt
2006-09-13 06:47:27 UTC
Permalink
Hi!

Wir setzen hier die Eclipse Platform als Container fuer unsere
Applikationen ein.

Nun macht es ab und an Sinn Log Meldungen auszugeben - momentan ist
dies ueber log4j geloest, was aber die Problemetik aufwirft, dass der
Consolen Logger immer auf die Console der ersten Session logt. Wenn man
sich erneut verbindet (in unserem Falle ueber telnet) gibt's keine Log
Meldungen.

Die Idee waere, den Logger an das Consolen-Out (Stream Ding) der
Eclipse Implementierung zu binden (aka eigener Appender) - nur komme
ich nicht an die 'CommandInterpreter' Instanz(en) welche es mir
moeglich mache auf die Eclipse Konsole zu schreiben.

Kennt sich da jmd besse aus als ich?

Ideen?

cu,


olli
Wetar
2006-09-13 11:49:16 UTC
Permalink
Wie du genau eclipse und telnet und log4j zusammenbringst, versteh ich
nicht. Aber vieleicht hilft dir dies weiter:

Beim start von eclipse kannst du -consolelog als parameter mitgeben
(also eclipse.exe -consolelog). Dann wird alles was auf system.out geht
ins log geschrieben.
Wetar
2006-09-13 12:08:36 UTC
Permalink
Falls du etwas anstrebst wie die cvs konsole von eclipse lohnt es sich
das org.eclipse.team.cvs.ui plugin anzuschauen. Dort hat es Extensions
zu den Extension Points org.eclipse.ui.console.consoleFactories und
org.eclipse.ui.console.consolePageParticipants.
Oliver Haupt
2006-09-13 12:09:57 UTC
Permalink
Post by Wetar
Wie du genau eclipse
Ich nutze das Eclipse plugin framework ..
Post by Wetar
und telnet
... das laeuft auf nem Server und bietet seine Konsole auf Port xxx via
telnet an
Post by Wetar
und log4j zusammenbringst,
Nen logger braucht man halt fuer seine Applikation ;)
Post by Wetar
Beim start von eclipse kannst du -consolelog als parameter mitgeben
(also eclipse.exe -consolelog). Dann wird alles was auf system.out geht
ins log geschrieben.
Nope, da koennte ich den Server auch in ne nohup Datei schreiben
lassen, es soll ja alles innerhalb der Eclipse Konsole ausgegeben
werden - nicht in's std out.

cu,

olli
Wetar
2006-09-15 09:28:59 UTC
Permalink
Jetzt ist's schon einiges klarer.

Hab das mal ausprobiert. Mit dem Extension Point
org.eclipse.ui.console.consoleFactories kannst du eine eigene Konsole
erstellen. Einfach das plugin.xml anpassen:

<plugin>
<extension
point="org.eclipse.ui.console.consoleFactories">
<consoleFactory
label="ConsoleX"
class="console.Factory">
</consoleFactory>
</extension>
</plugin>


Die Factory die du registrierst sieht dann etwa so aus:

package console;

import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleFactory;
import org.eclipse.ui.console.IConsoleManager;
import org.eclipse.ui.console.MessageConsole;

public class Factory implements IConsoleFactory {

private static MessageConsole _console;

public void openConsole() {
MessageConsole console = getConsole();
if (console != null) {
IConsoleManager manager =
ConsolePlugin.getDefault().getConsoleManager();
IConsole[] existing = manager.getConsoles();
boolean exists = false;
for (int i = 0; i < existing.length; i++) {
if(console == existing[i])
exists = true;
}
if(! exists)
manager.addConsoles(new IConsole[] {console});
manager.showConsoleView(console);
}

}

public static MessageConsole getConsole() {
if (_console == null) {
_console = new MessageConsole("ConsoleX",null);
}
return _console;
}

}



Nun kannst du in die Konsole schreiben:

Factory.getConsole().activate();
Factory.getConsole().newOutputStream().write("hallo
Welt".getBytes());


Wenn du dein Plugin startest hast du wie gewohnt die Console in
Eclipse. Wenn du auf das Symbol am linken rand klickst, hast du neben
CVS nun auch die "ConsoleX" zur Auswahl.

Hilft dir dies weiter?
Oliver Haupt
2006-09-15 09:57:26 UTC
Permalink
Post by Wetar
Wenn du dein Plugin startest hast du wie gewohnt die Console in
Eclipse. Wenn du auf das Symbol am linken rand klickst, hast du neben
CVS nun auch die "ConsoleX" zur Auswahl.
Ich wette: Nein - was priaemar daran lieget, dass ich nur den Eclipse
kern verwende - ohne GUI.

Wir setzen nur den Plugin Mechanismus und Eclipse als Container fuer
Plugins ein. Mit dem Eclipse 'wie man es kennt'/der IDE hat das dann
recht wenig zu tuen.
Post by Wetar
Hilft dir dies weiter?
Leider nein - eigentlich ist das Problem recht einfach - ich bin halt
nur zu bloede irgednwo im BundleContext oder sostwo nen
CommadoInterpreter zu finden, der immer auf die Kosole schreibt.

Trotzdem Danke!

cu,

olli
Wetar
2006-09-15 11:16:44 UTC
Permalink
Jetzt bin ich am Ende meiner Weisheit... ;-)

Was für eine Konsole meinst du dann?

Die altbekannte Konsole wird bei Eclipse ins Nirvana umgeleitet. Also
alles was auf System.out geht is prinzipiell verloren, bzw. kann mit
-consolelog ins .log umgeleitet werden.

Wohin genau möchtest du denn loggen? Was verstehst du unter
"Consolen-Out (Stream Ding) der
Eclipse Implementierung"?
Wetar
2006-09-15 11:44:43 UTC
Permalink
Ich hab mal ein bisschen rumgeschaut.
Ich gen davon aus, dass du eclipse mit eclipse -console startest.
Meine Information bezüglich -consolelog war nicht ganz richtig. mit
eclipse -console -consolelog kriegst du die logmeldungen in die Konsole
nicht die Konsole ins log. Vieleicht hilft dir dies ja doch weiter.
Logmeldungen kannst du mit Plugin.getLog().log(status) schreiben.

Hast du schon versucht einfach ins System.out zu schreiben. Ich könnte
mir vorstellen, dass dies in dieser Konsole ebenfalls erscheint.
Oliver Haupt
2006-09-15 11:56:31 UTC
Permalink
Post by Wetar
Hast du schon versucht einfach ins System.out zu schreiben. Ich könnte
mir vorstellen, dass dies in dieser Konsole ebenfalls erscheint.
Mache ich ja ;)

Nur ist das System.out, dass der Shell - wenn ich die Verbindung kappe
und mich neu Verbinde, schreibt Eclipse lustig weiter in das System.out
der alten Shell.

cu,
olli

Lesen Sie weiter auf narkive:
Loading...