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 wiefolgt:

  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.
    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.
     
  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 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>

  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 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.
     

  4. 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.
     
  5. 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
    
       
  6. 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

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