Dúvida Java.util.logging + JAXB!

2 respostas
nei.junior

Pessoal, bom dia !

Preciso de um help vocês.
Estou usando a classe java.util.logging para alguns testes, pois pretendo utilizado no
sistema que estou desenvolvendo.
Já consegui fazer gerar o log no formato xml (customizado por mim). Também ja consigo ler o
arquivo de XML e joga-lo para um objeto no java, utilizando o método "unmarshal" da classe JAXB.
Minhas dúvidas agora são as seguintes:

- Primeira: Quando gero uma mensagem de erro onde tem várias exceptions por exemplo, ao gerar meu xml com o log, o mesmo cria uma tag mostrando quais foram as exceptions e utilizo um for para imprimir todas ficam igual no exemplo abaixo do meu xml:
<?xml version="1.0" encoding="windows-1252" standalone="no" ?>
- <log>
  - <record>
    <date>2009-03-20T16:48:07</date>
    <level>INFO</level>
    <classe>exemplologger.Main</classe>
    <method>gravaLog</method>
    <message>Mensagem 'Log' "</message>
    - <exception>
      <message>java.io.FileNotFoundException: teste_Novo (O sistema não pode encontrar o arquivo especificado)</message>
      - <frame>
          <classe>java.io.FileInputStream</classe>
            <method>open</method>
        </frame>
      - <frame>
          <classe>java.io.FileInputStream</classe>
            <method><init></method>
        </frame>
      - <frame>
          <classe>java.io.FileInputStream</classe>
          <method><init></method>
        </frame>
      - <frame>
          <classe>exemplologger.Main</classe>
          <method>gravaLog</method>
        </frame>
      - <frame>
          <classe>exemplologger.Main</classe>
          <method>main</method>
        </frame>
     </exception>
   </record>
</log>
Para utilizar o "unmarshal" eu crio as classes com as anotações XML para conseguir pegar os dados dentro do XML e grava-los no objeto. Minha dúvida é: Como consigo ler todas as exceptions e gravar como um array dentro de um objeto ? Pois da forma que estou fazendo, o mesmo esta gravando apenas a ultima exception no objeto.

- Segunda: Quando estiver usando o Loggin, vou gerar vários logs no dia, sendo assim ele ira
criar dentro do mesmo arquivo XML várias estruturas conforme a que coloquei acima. Portanto,
quando tento ler o xml com o unmarshal o mesmo apresenta erro, pois tenho várias estruturas
do xml e o mesmo não consegue ler. Minha dúvida: Como faço para conseguir ler quando estiver
dessa forma ? ou precisarei gerar um arquivo XML para cada mensagem de LOG ?

Aguardo um help.

Obrigado por enquanto !

2 Respostas

nei.junior

Pessoal, bom dia !

Referente as duas dúvidas que tenho, a primeira eu consegui resolver, porém ainda estou com dúvida na segunda. Se alguem puder ajudar, agradeço.

1.Tive que criar as seguintes classes para poder ler o XML:

public class Log {  
   
     private Record record;  
    
     //Construtor...  
     //Getters e Setters  
}  
   
public class Record {  
   
     private Date date;  
     private String method;  
     private String level;  
     private String classe;  
     private String message;  
     private Exception exception;  
     
     //Construtor...  
     //Getters e Setters  
}  
   
public class Exception {  
    
     private String message;  
     private List<Frame> frame;  
   
     //Construtor...  
     //Getters e Setters  
}  
   
public class Frame {  
   
     private String classe;  
     private String method;  
   
     //Construtor...  
     //Getters e Setters  
 }
Obs.: Se não criar as classes da forma que mostrei acima, não consigo ler o XML. Bem, o que estava errado aqui é que na classe "Exception" não havia colocado o "Frame" como "List". Após acertar isso, consegui ler o XML e armazenar as exceptions em um array. Marquei nessa.. :-D

2. Esse ainda não consegui resolver. Porque o que acontece é o seguinte:
Quando mando gerar o log, o mesmo gera um arquivo xml com a seguinte estrutura:

<?xml version="1.0" encoding="windows-1252" standalone="no" ?>  
- <log>  
   - <record>  
     <date>2009-03-20T16:48:07</date>  
     <level>INFO</level>  
     <classe>exemplologger.Main</classe>  
     <method>gravaLog</method>  
     <message>Mensagem 'Log' "</message>  
     - <exception>  
       <message>java.io.FileNotFoundException: teste_Novo (O sistema não pode encontrar o arquivo especificado)</message>  
       - <frame>  
           <classe>java.io.FileInputStream</classe>  
             <method>open</method>  
         </frame>  
       - <frame>  
           <classe>java.io.FileInputStream</classe>  
             <method><init></method>  
         </frame>  
       - <frame>  
           <classe>java.io.FileInputStream</classe>  
           <method><init></method>  
         </frame>  
       - <frame>  
           <classe>exemplologger.Main</classe>  
           <method>gravaLog</method>  
         </frame>  
       - <frame>  
           <classe>exemplologger.Main</classe>  
           <method>main</method>  
         </frame>  
      </exception>  
    </record>  
</log>
Quando mando gerar novamente o log, o mesmo gera no mesmo arquivo mais uma estrutura da forma que esta acima. Sendo assim quando ler o arquivo com o "unmarshal" o mesmo da erro. Pelo testes que estive fazendo, se ao gerar o log eu conseguisse manter o cabeçalho do XML:
<?xml version="1.0" encoding="windows-1252" standalone="no" ?>  
- <log>  
.....  
</log>
E colocasse apenas o record no meio, ja daria certo. Porém, minha dúvida é: como faço para o Logging gerar o XML dessa forma ? Alguem tem alguma ideia de como posso fazer isso ?

Espero ter sido claro na segunda dúvida.

Obrigado por enquanto !

nei.junior

E ai Pessoal, bom dia !

Ninguém sabe para me dar uma ajuda com isso ? Preciso acertar apenas a segunda dúvida, a primeira ja consegui resolver.

Aguardo e obrigado.

Criado 23 de março de 2009
Ultima resposta 26 de mar. de 2009
Respostas 2
Participantes 1