Suporte a JSR-047 e Commons Logging
O Log and Trace Analyzer fornece suporte independente e de plug-in para usuários novos e existentes dos seguintes utilitários de registro:
- JSR-047 Java Logging APIs
- Commons Logging
Os detalhes deste suporte estão a seguir.
- Capacidade para Exportar Mensagens de Log para um Agente de Registro
Uma extensão da classe abstrata java.util.logging.Handler no
pacote org.eclipse.hyades.logging.java permite a configuração de registradores
para exportar mensagens de log para um Agente de Registro.
Essa rotina de tratamento org.eclipse.hyades.logging.java.LoggingAgentHandler
verifica se uma mensagem de log java.util.logging.LogRecord gravada em
um registrador pode ser registrada com base no filtro e no nível de registro da rotina de tratamento. Se
a mensagem de log tiver que ser registrada, será criado um Agente de Registro com o nome igual
ao do registrador que registra a mensagem. A mensagem é formatada utilizando uma
org.eclipse.hyades.logging.java.XmlFormatter e gravada no
Agente de Registro.
- Capacidade para Converter Mensagens de Log em XML
Uma extensão da classe abstrata java.util.logging.Formatter no
pacote org.eclipse.hyades.logging.java permite que o
org.eclipse.hyades.logging.java.LoggingAgentHandler e outras rotinas de tratamento
formatem mensagens de log java.util.logging.LogRecord em XML. Esse formatador
org.eclipse.hyades.logging.java.XmlFormatter converte a mensagem
java.util.logging.LogRecord em XML equivalente à implementação
org.eclipse.hyades.internal.logging.core.XmlGenerator atual, mas
excluindo as marcações de host, processo e agente. O XML gerado não é
formatado e o nível máximo de aninhamento é definido como 4. Durante a formatação,
é verificado se o objeto implementa a interface org.eclipse.hyades.logging.core.
IExternalizableToXml. Se implementar,
a API externalizeCanonicalXmlString() será chamada no lugar da
serialização de XML por meio de introspecção, por motivos de desempenho.
A seguinte saída ilustra a conversão em XML de uma mensagem de log (a
cadeia "Hello World" (nível de registro GRAVE)):
<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="Hello World" 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>
- Capacidade para Inicializar Classes de Extensão em Java Logging
APIs Existentes
Para inicializar as classes de extensão org.eclipse.hyades.logging.java14
nas Java Logging APIs existentes no JDK 1.4.0 e acima, será necessário adicionar as
seguintes entradas no arquivo de configuração JRE_HOME\lib\logging.properties
antes da inicialização da VM ou antes da API
java.util.logging.LogManager.readConfiguration() ser chamada:
handlers= <suas rotinas de tratamento atuais>, org.eclipse.hyades.logging.java.LoggingAgentHandler
org.eclipse.hyades.logging.java.LoggingAgentHandler.formatter = org.eclipse.hyades.logging.java.XmlFormatter
Outra alternativa é utilizar as classes de extensão de plug-in org.eclipse.hyades.logging.java14
com as Java Logging APIs existentes no JDK 1.4.0
e acima no Registrador (por exemplo, rotina de tratamento) e na Rotina de Tratamento (por exemplo,
formatador) através de programação no tempo de execução utilizando as APIs addHandler() e
setFormatter(), respectivamente.
- Capacidade para Incluir um Evento Base Comum em um Registro de Log
Uma extensão da classe java.util.logging.LogRecord no pacote
org.eclipse.hyades.logging.java permite a criação de um
registro de log personalizado para incluir um
org.eclipse.hyades.logging.events.ICommonBaseEvent em um
java.util.logging.LogRecord.
Essa org.eclipse.hyades.logging.java.CommonBaseEventLogRecord simples
estende java.util.logging.LogRecord e contém uma única referência a
um org.eclipse.hyades.logging.events.ICommonBaseEvent. Você é
responsável pela criação de um novo objeto
org.eclipse.hyades.logging.java.CommonBaseEventLogRecord antes
de gravar no java.util.logging.Logger.
- Capacidade para Permitir que a Filtragem de Registros Efetuados não seja Processada
pela Classe de Rotina de Tratamento
É possível filtrar os registros efetuados para que não sejam processados pela classe
org.eclipse.hyades.logging.java.LoggingAgentHandler definindo uma
implementação da interface java.util.logging.Filter, como a
org.eclipse.hyades.logging.java.CommonBaseEventFilter (permite que apenas
org.eclipse.hyades.logging.java.CommonBaseEventLogRecord seja
registrada com êxito) e o registro de java.util.logging.Level na
rotina de tratamento. Esses valores podem ser definidos através de programação no tempo de execução utilizando as APIs
setFilter() e setLevel(), respectivamente.
Outra alternativa é adicionar as seguintes entradas ao arquivo de configuração JRE_HOME\lib\logging.properties
antes da inicialização da VM ou antes da API
java.util.logging.LogManager.readConfiguration() ser chamada:
org.eclipse.hyades.logging.java.LoggingAgentHandler.level = <nível>
org.eclipse.hyades.logging.java.LoggingAgentHandler.filter = org.eclipse.hyades.logging.java.CommonBaseEventFilter
- Capacidade para Criar um Registrador Personalizado para java.lang.Objects
e java.lang.Throwables
Uma implementação da interface org.apache.commons.logging.Log
no pacote org.eclipse.hyades.logging.commons permite
a criação de um registrador personalizado para registro de java.lang.Objects e
java.lang.Throwables em um Agente de Registro com o nome igual ao do registrador.
Essa org.eclipse.hyades.logging.commons.Logger verifica se as mensagens de log
java.lang.Object e/ou java.lang.Throwable gravadas
em um registrador podem ser registradas com base no nível de registro do registrador. Se a
mensagem de log tiver que ser registrada, a mensagem de log java.lang.Object e java.lang.Throwable
será formatada utilizando uma
org.eclipse.hyades.internal.logging.core.XmlGenerator e gravada no
Agente de Registro. Durante a formatação, é verificado se o objeto implementa a interface
org.eclipse.hyades.logging.core. IExternalizableToXml. Se implementar,
a API externalizeCanonicalXmlString() será chamada no lugar da
serialização de XML por meio de introspecção, por motivos de desempenho. Para inicializar
a classe org.eclipse.hyades.logging.commons.Logger na classe
org.apache.commons.logging.LogFactory, será necessário definir a seguinte
propriedade do sistema na inicialização da VM:
-Dorg.apache.commons.logging.Log=org.eclipse.hyades.logging.commons.Logger
Precauções
- Se você registrar mensagens de log em cadeia, não poderá incorporar fragmentos em XML à
mensagem. Se incorporar fragmentos em XML à mensagem de log, o conteúdo do XML
será normalizado e adicionado ao valor do atributo de valor de uma marcação de cadeia. Por exemplo:
<String >logging.util.agent_idref>=>"AGENT_CREATE.LoggingUtilSample
logger.1045075846.538" >logging.util.MsgLoggerLevel>=>"FINEST"
>Value>=>"<tag attribute="value"/>">/>>
- Se você usar os utilitários de registro com.ibm.etools.logging.util independentes,
deverá adicionar o caminho para os arquivos JAR hlcore.jar, hparse.jar, hexl.jar
e hexr.jar ao caminho de classe do sistema e da VM.
Conceitos Relacionados
Modelo Common Base Event
(C) Copyright IBM Corporation 2000, 2003. Todos os Direitos Reservados.