Einloggen von Eclipse / OSGi Plugins
Bin ich angefangen zu entwickeln, ein Eclipse-plugin (technisch, ein OSGi-plugin) und eines der ersten Probleme, die ich habe ist, dass ich kann nicht scheinen, um die Kontrolle der commons-logging-Ausgabe, wie ich normalerweise tun würde.
Ich habe die commons-logging-Paket in den plugin-Abhängigkeiten, und in der Tat, wenn ich das log etwas (unter INFO oder einen höheren Schweregrad) es wird protokolliert, an die Konsole. Allerdings kann ich nicht scheinen, um zu protokollieren, auf einer niedrigeren Ebene (wie z.B. DEBUG oder TRACE).
Ich angegeben habe, eine log4j.properties-Datei, und es ist auf dem Klassenpfad (für die Laufzeit, ebenso wie die commons-logging-Paket ist), aber keine der Einstellungen in dieser Datei haben keinerlei Auswirkungen auf das Verhalten der logger.
Hier ist die log4j.Eigenschaften Datei:
# Log4j Logging levels, in order of decreasing importance are:
# FATAL, ERROR, WARN, INFO, DEBUG, TRACE
#
# Root logger option
log4j.rootLogger=ERROR,stdout
#,LOGFILE
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %r (%l) %t%n - %m%n
Was muss ich tun, dass ich tatsächlich Kontrolle über die Ausgabe des Loggers?
Hier sind einige Beispiel-die Ausgabe von Meldungen, in der Hoffnung, dass die Formatierung kann Zusammenfallen mit einem Standard für java.util.Anmeldung oder sonstige Hinweise zu jemand:
Oct 21, 2008 11:01:23 PM com.stottlerhenke.sentinel.client.Activator start
SEVERE: fatal_message
Oct 21, 2008 11:01:23 PM com.stottlerhenke.sentinel.client.Activator start
WARNING: warn_message
Oct 21, 2008 11:01:23 PM com.stottlerhenke.sentinel.client.Activator start
INFO: info_message
Update:
Ich habe jetzt versucht verschiedene Kombinationen von:
- org.osgi.service.log.LogService et al.
- slf4j
- Log4J
- Commons-logging
- java.util.Protokollierung
und ich kann nur bekommen, zu DEBUGGEN oder zu senken, Ebene Nachrichten angezeigt werden, wenn ich laufen bin OSGi manuell von einer Eingabeaufforderung (was unpraktisch ist, für das, was ich entwickle). Des weiteren kann ich keinen Einfluss auf irgendwelche andere Art der Protokollierung Konfiguration über verschiedene Eigenschaften von Dateien. Alles, was ich versuche in dieser Hinsicht scheint außer Kraft gesetzt werden, von einer eclipse-Einstellung.
Habe ich auch versucht, indem die verschiedenen config-Dateien für die oben genannten Bibliotheken, die an zahlreichen Orten, darunter auch als plug-in Fragmenten an Ihren jeweiligen Bibliotheken wie vorgeschlagen hier, und immer noch mit dem gleichen Resultat passiert.
Ich habe implementiert eine benutzerdefinierte LogListener, und verfolgt den gesamten Pfad einer log-Meldung (wie auch ich wissen, wie jedenfalls) mit dem System.aus.println ist, und debug-Meldungen sind präsentieren rechts, bis Sie ausgegeben werden, durch was auch immer zugrunde liegenden logging-API, die ich verwende, dann verschwinden Sie.
InformationsquelleAutor der Frage rcreswick | 2008-10-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
3 Tage später...
Habe das problem gefunden! Es gab zwei Dinge, die ich tun musste, zunächst mal gab es ein problem mit einem MANIFEST.MF-Datei:
Hatte ich Folgendes in die MANIFEST.MF für ein bundle:
Dass sollte wurden:
Der entscheidende Unterschied ist, dass die log4j verwendet wurde, die als ein Paket, wenn es gewesen sein sollte, als ein bundle. (Ich hatte eine log4j jar in mein lib dir aus, als ich erwartet hatte Log4j zu "einfach funktionieren" OSGi.) Die jar - hat Arbeit, sozusagen. Es offenbar fanden einige eclipse-level-log4j-Konfiguration und-Gebrauch gemacht. Da war es nur ein Glas (kein Bündel) es nicht machen Verwendung von jedem der Fragmente, dass könnte geben Sie eine benutzerdefinierte Protokollierung config, das führt uns zu der anderen Sache, die passieren musste:
Ich brauchte, um ein fragment bundle angeben, das logging config. Dieser link von VonC gab mir die info, das zu tun. Folge, dass dabei eine Reihe von Dingen, leider, das Paket mit der falschen MANIFESTIEREN.MF hatte immer noch das log4j-jar angegeben in der Bundle-Klassenpfad, und das scheint das überschreiben der Import-Package-Liste.
Ich endlich herausgefunden, was Los war, wenn ich brauchte, um zu melden, in einem anderen bundle (ich hatte gerade aufgegeben, an diesem Punkt, und ging zurück zur Verwendung von Protokollen an das Warn-level und höher.) Das neue bundle nicht finden konnte, ein logging config!!! (damit hatte ich dann drei bundles laufen in die gleiche OSGi-Umgebung mit jeweils unterschiedlichen log4j Verhalten -- eine mit meinem fragment-Einstellungen, ein anderes mit einigen zufälligen Eclipse logging-Einstellungen, und endlich das neue bundle, das nicht irgendwelche logging config.) Detaillierte Vergleiche dieser drei bundles offenbart den Unterschied in der Manifest.MF-Dateien, und jetzt sind Sie alle verwenden die fragment-bundle.
Verdanke ich einer riesige Dank die Autoren viel von Eclipse-Zone, VonC, Ekkes, und jeder in #eclipse auf freenode für Ihre Hilfe und Geduld 🙂
InformationsquelleAutor der Antwort rcreswick
Dies ist nicht eine tatsächliche Antwort auf deine Frage, aber vielleicht finden Sie einige Hinweise in diesem eine Reihe von Artikeln, die von ekke.
Ich nehme an, Sie Lesen schon "Mit Log4J in Eclipse Equinox/OSGi":
Hast du eine osgi-launch-session, die im Konsolen-Modus ?
Dass Art und Weise können Sie testen, log4j in einem reinen osgi-Umgebung und überprüfen, ob es funktioniert es.
Lassen Sie verwenden wissen, wenn Sie eine Lösung finden (veröffentlichen es als Antwort), und ich Stimmen Sie es ist 😉
InformationsquelleAutor der Antwort VonC