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:

Die Unterstützung gestaltet sich wie folgt:

  1. 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.
    Die Steuerroutine 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.
     
  2. 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 Steuerroutinen 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, der Prozess und die Agentenkennungen ausgeschlossen werden. Das generierte XML ist nicht formatiert und die maximale Verschachtelungstiefe ist auf 4 Stufen gesetzt. Beim Formatieren wird überprüft, ob das Objekt die Schnittstelle org.eclipse.hyades.logging.core IExternalizableToXml implementiert. 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="AGENT_CREATE.org.eclipse.hyades.tests.java.JavaLoggingTest.1063298146.542"
       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>

  3. 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 Steuerroutinen>, 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. Steuerroutine) und auf der Steuerroutine (z. B. Formatter) programmatisch zur Laufzeit verwenden, indem Sie eine der APIs addHandler() bzw. setFormatter() verwenden.
     

  4. Funktion zum Einbinden eines Common Base Events in einem Protokollsatz
    Eine Erweiterung der Klasse java.util.logging.LogRecord im Paket org.eclipse.hyades.logging.java ermöglicht Ihnen das Erstellen eines angepassten Protokollsatzes zum Einfügen eines org.eclipse.hyades.logging.events.cbe.CommonBaseEvent in einen java.util.logging.LogRecord.

    Dieser org.eclipse.hyades.logging.java.CommonBaseEventLogRecord erweitert einfach java.util.logging.LogRecord und enthält einen einzigen Verweis auf ein org.eclipse.hyades.logging.events.cbe.CommonBaseEvent. Sie müssen ein neues Objekt vom Typ org.eclipse.hyades.logging.java.CommonBaseEventLogRecord erstellen, bevor Sie an java.util.logging.Logger schreiben.
     
  5. Funktion zum Herausfiltern von Protokollsätzen, damit diese nicht von der Steuerroutinenklasse 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 der Steuerroutine 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
    
       
  6. Möglichkeit zur Erstellung einer angepassten Protokollfunktion für java.lang.Objects und  java.lang.Throwables
    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 Objekten 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 log mit einem org.eclipse.hyades.internal.logging.core.XmlGenerator formatiert und an den Protokollagenten geschrieben. Beim Formatieren wird überprüft, ob das Objekt die Schnittstelle von org.eclipse.hyades.logging.core IExternalizableToXml implementiert. 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 die folgende Systemeigenschaft beim VM-Start festlegen:
    -Dorg.apache.commons.logging.Log=org.eclipse.hyades.logging.commons.Logger

Vorsichtsmaßnahmen

  1. 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 eines Zeichenfolge-Tags hinzugefügt. Beispiel:
    <String logging.util.agent_idref="AGENT_CREATE.LoggingUtilSample logger.1045075846.538" logging.util.MsgLoggerLevel="FINEST" Value="<tag attribute=&quot;value&quot;/>"/>
  2. 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, 2004. Alle Rechte vorbehalten.