Unterstützung von JSR-047 und Commons Logging
Die Protokoll- und Traceanalyseprogramme bieten eigenständige Unterstützung und Plug-in-Unterstützung für neue und bestehende Benutzer der folgenden
Protokolldienstprogramme:
- JSR-047 Java Logging APIs
- Commons Logging
Die Unterstützung gestaltet sich wiefolgt:
- Funktion zum Exportieren von Protokollnachrichten an einen Protokollagenten
Durch Erweitern der abstrakten Klasse java.util.logging.Handler im Paket
org.eclipse.hyades.logging.java können Protokollfunktionen so konfiguriert werden,
dass Protokollnachrichten an einen Protokollagenten exportiert werden.
Der Handler org.eclipse.hyades.logging.java.LoggingAgentHandler prüft auf Basis
des Filters und der Protokollstufe, ob eine Protokollnachricht vom Typ
java.util.logging.LogRecord , die an eine Protokollfunktion geschrieben
wird, protokolliert werden kann. Wenn eine Protokollnachricht protokolliert werden soll,
wird ein Protokollagent mit dem gleichen Namen wie die Protokollfunktion erstellt, welche
die Nachricht protokolliert. Die Nachricht wird mit einem org.eclipse.hyades.logging.java.XmlFormatter
formatiert und an den Protokollagenten geschrieben.
- Funktion zum Konvertieren von Protokollnachrichten nach XML
Durch Erweitern der abstrakten Klasse java.util.logging.Formatter im Paket
org.eclipse.hyades.logging.java können
org.eclipse.hyades.logging.java.LoggingAgentHandler und andere Handler Protokollnachrichten
vom Typ java.util.logging.LogRecord nach XML konvertieren. Das Formatierungsprogramm
org.eclipse.hyades.logging.java.XmlFormatter konvertiert die Nachricht vom Typ
java.util.logging.LogRecord nach XML. Der Unterschied zur Implementierung
org.eclipse.hyades.internal.logging.core.XmlGenerator besteht darin, dass der Host, Prozess
und die Agentenkennungen ausgeschlossen werden. Das generierte XML ist nicht formatiert und besitzt
eine maximale Verschachtelungstiefe von 4 Ebenen. Bei der Formatierung wird geprüft, ob das Interface
org.eclipse.hyades.logging.core.IExternalizableToXml implementiert wird. Ist dies der Fall,
wird aus Leistungsgründen die API externalizeCanonicalXmlString() anstelle der XML-Serialisierung durch
Introspektion aufgerufen.
Die folgende Ausgabe verdeutlicht die XML-Konvertierung einer Protokollnachricht (die Zeichenfolge "Hallo Welt" (Protokollstufe SEVERE)):
<´LogRecord logging.util.id="java.util.logging.LogRecord_10468105484720000"
logging.util.agent_idref="org.eclipse.hyades.tests.java.JavaLoggingTest"
logging.util.MsgLoggerLevel="SEVERE" LoggerName="org.eclipse.hyades.tests.java.JavaLoggingTest"
ResourceBundleName="null" SequenceNumber="0" SourceClassName="org.eclipse.hyades.tests.java.JavaLoggingTest"
SourceMethodName="main" Message="Hallo Welt" ThreadID="10"
Millis="1046810548171">
<ResourceBundle Instance_Name="ResourceBundle" Value="null"/>
<Level Instance_Name="Level" logging.util.id="java.util.logging.Level_10468105484720001"
ResourceBundleName="sun.util.logging.resources.logging" Name="SEVERE"
LocalizedName="SEVERE"><Class Instance_Name="Class" logging.util.id="java.lang.Class_10468105484720002"
Name="java.util.logging.Level" Type="class" Package="java.util.logging"
Modifers="public" Superclass="java.lang.Object" />
</Level>
<Array Instance_Name="Parameters" Value="null" />
<Throwable Instance_Name="Thrown" Value="null" />
<Class Instance_Name="Class" logging.util.id="java.lang.Class_10468105484820000"
Name="java.util.logging.LogRecord" Type="class" Package="java.util.logging"
Modifers="public" Superclass="java.lang.Object" />
</LogRecord>
- Funktion zum Laden von Erweiterungsklassen zu vorhandenen Java Logging-APIs
Zum Laden der Erweiterungsklassen org.eclipse.hyades.logging.java14 zu den vorhandenen
Java Logging-APIs in JDK 1.4.0 und höher müssen Sie die folgenden Einträge in der Konfigurationsdatei
JRE_HOME\lib\logging.properties hinzufügen, bevor Sie die VM starten oder bevor die API
java.util.logging.LogManager.readConfiguration() aufgerufen wird:
handlers= <ihre aktuellen handler>, org.eclipse.hyades.logging.java.LoggingAgentHandler
org.eclipse.hyades.logging.java.LoggingAgentHandler.formatter = org.eclipse.hyades.logging.java.XmlFormatter
Alternativ können Sie die Plug-in-Erweiterungsklassen org.eclipse.hyades.logging.java14
mit den vorhandenen Java Logging-APIs in JDK 1.4.0 oder höher auf der Protokollfunktion (z. B. Handler)
und auf dem Handler (z. B. Formatter) programmatisch zur Laufzeit verwenden, indem Sie die eine der APIs
addHandler() bzw. setFormatter() verwenden.
- Funktion zum Einbinden eines Common Base Events in einem Protokollsatz
Durch Erweiterung der Klasse java.util.logging.LogRecord im Paket
org.eclipse.hyades.logging.java können Sie einen angepassten Protokollsatz erstellen,
mit dem Sie ein org.eclipse.hyades.logging.events.ICommonBaseEvent in einen
java.util.logging.LogRecord einschließen können.
Dieser org.eclipse.hyades.logging.java.CommonBaseEventLogRecord erweitert einfach
java.util.logging.LogRecord, und enthält einen einzelnen Verweis auf ein
org.eclipse.hyades.logging.events.ICommonBaseEvent. Sie müssen ein neues Objekt
vom Typ org.eclipse.hyades.logging.java.CommonBaseEventLogRecord erstellen, bevor
Sie an java.util.logging.Logger schreiben.
- Funktion zum Herausfiltern von Protokollsätzen, damit diese nicht von der Handlerklasse verarbeitet werden
Sie können die Protokollsätze herausfiltern, damit diese nicht von der Klasse
org.eclipse.hyades.logging.java.LoggingAgentHandler verarbeitet werden, indem Sie eine
Implementierung des Interfaces java.util.logging.Filter einstellen, wie z. B.
org.eclipse.hyades.logging.java.CommonBaseEventFilter (dadurch wird nur
org.eclipse.hyades.logging.java.CommonBaseEventLogRecord erfolgreich protokolliert)
und dann java.util.logging.Level auf dem Handler protokollieren.
Diese Werte können programmatisch zur Laufzeit mit den APIs
setFilter() bzw. setLevel() festgelegt werden.
Alternativ können Sie die folgenden Einträge in der Konfigurationsdatei
JRE_HOME\lib\logging.properties hinzufügen, bevor Sie die VM starten oder bevor die API
java.util.logging.LogManager.readConfiguration() aufgerufen wird:
org.eclipse.hyades.logging.java.LoggingAgentHandler.level = <level>
org.eclipse.hyades.logging.java.LoggingAgentHandler.filter = org.eclipse.hyades.logging.java.CommonBaseEventFilter
- Funktion zum Erstellen einer angepassten Protokollfunktion für Objekte vom Typ java.lang.Object und java.lang.Throwable
Durch eine Implementierung des Interfaces org.apache.commons.logging.Log
im Paket org.eclipse.hyades.logging.commons können Sie eine angepasste Protokollfunktion
zum Protokollieren von Objektes des Typs java.lang.Object und
java.lang.Throwable auf einem Protokollagenten erstellen, der den gleichen Namen wie die Protokollfunktion trägt.
Dieser org.eclipse.hyades.logging.commons.Logger prüft, ob abhängig von der Protokollstufe der Protokollfunktion
Protokollnachrichten von java.lang.Object und/oder java.lang.Throwable an die Protokollfunktion geschrieben
werden können. Wenn die Nachricht ins Protokoll geschrieben wird, wird das Protokoll von java.lang.Object und java.lang.Throwable
mit einem org.eclipse.hyades.internal.logging.core.XmlGenerator formatiert und an den Protokollagenten geschrieben.
Bei der Formatierung wird geprüft, ob das Interface org.eclipse.hyades.logging.core.IExternalizableToXml implementiert wird. Ist
dies der Fall, wird aus Leistungsgründen die API externalizeCanonicalXmlString() anstelle der XML-Serialisierung durch
Introspektion aufgerufen. Zum Laden der Klasse org.eclipse.hyades.logging.commons.Logger mit der Klasse
org.apache.commons.logging.LogFactory müssen Sie das folgende Systemmerkmal beim VM-Start festlegen:
-Dorg.apache.commons.logging.Log=org.eclipse.hyades.logging.commons.Logger
Vorsichtsmaßnahmen
- Wenn Sie Protokollnachrichten mit Zeichenfolgen protokollieren, dürfen Sie keine XML-Fragmente in die Nachrichten einbetten.
Wenn Sie XML-Fragmente in die Protokollnachricht einbetten, wird der XML-Inhalt normalisiert und dem Wert des Attributs value
eines String-Tags hinzugefügt.
Beispiel:
<String >logging.util.agent_idref>=>"AGENT_CREATE.LoggingUtilSample
logger.1045075846.538" >logging.util.MsgLoggerLevel>=>"FINEST"
>Value>=>"<tag attribute="value"/>">/>>
- Wenn Sie die Standalone-Protokolldienstprogramme com.ibm.etools.logging.util verwenden, müssen Sie
dem Systempfad und dem VM-Klassenpfad den Pfad zu den JAR-Dateien hlcore.jar, hparse.jar, hexl.jar
und hexr.jar hinzufügen.
Verwandte Konzepte
Common Base Event-Modell
(C) Copyright IBM Corporation 2000, 2003. Alle Rechte vorbehalten.