| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/12/2008 15:08:27
|
zap
JavaChild
![[Avatar]](/images/avatar/c8cdda0241642ad6b4198.jpg)
Membro desde: 19/03/2004 17:14:23
Mensagens: 127
Localização: Sao Paulo - SP
Offline
|
Ola Pessoal,
Alguem usa logs em suas aplicacoes ?
Ha alguma estrategia ou boa pratica para utilizar os logs ?
Estou trabalhando em um sistema web e utilizo o Log4j, criando a instancia:
Nos trechos de codigo vou utilizando as mensagens:
Esse foi um pequeno exemplo. Funciona, mas nao sei se ha alguma pratica melhor.
Para toda classe eu preciso sempre instanciar com ela ? Em Logger.getLogger( LoginAction.class );
Ha alguma forma mais generica ?
Outro problema: Como ha varias empresas acessando o servidor, para saber qual a empresa disparou o log eu teria que ficar concatenando o id da empresa (e outros identificadores) sempre em cada mensagem do log ??
Agradeco comentarios e sugestoes
|
zap |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/12/2008 15:49:52
|
aleck
GUJ Ranger
![[Avatar]](/images/avatar/2051bd70fc110a2208bdbd4a743e7f79.jpg)
Membro desde: 27/03/2006 08:08:33
Mensagens: 843
Localização: Rio de Janeiro
Offline
|
Se é interesse guardar os acessos das empresas, recomendo a separação por pacotes/interfaces.
Exemplo: br.com.empresa1.cadastros.usuario (interface)
br.com.empresa2.cadastros.usuario (interface)
br.com.empresa3.cadastros.usuario (interface)
br.com.interno.cadastros.usuario (implementação)
Assim vc poderia separar os logs por pacotes (br.com.empresa1,2,3)
em arquivos separados (empresa1.log,empresa2.log,empresa3.log).
Claro que nem sempre é viavel, mas é uma estratégia válida.
|
Desenvolvedor iOS/Android
http://blog.alexandresoli.com.br
@alexandresoli |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2008 09:06:22
|
zap
JavaChild
![[Avatar]](/images/avatar/c8cdda0241642ad6b4198.jpg)
Membro desde: 19/03/2004 17:14:23
Mensagens: 127
Localização: Sao Paulo - SP
Offline
|
aleck wrote:Se é interesse guardar os acessos das empresas, recomendo a separação por pacotes/interfaces.
Exemplo: br.com.empresa1.cadastros.usuario (interface)
br.com.empresa2.cadastros.usuario (interface)
br.com.empresa3.cadastros.usuario (interface)
br.com.interno.cadastros.usuario (implementação)
Assim vc poderia separar os logs por pacotes (br.com.empresa1,2,3)
em arquivos separados (empresa1.log,empresa2.log,empresa3.log).
Claro que nem sempre é viavel, mas é uma estratégia válida.
Eh inviavel para nos. Nao podemos deixar a aplicacao amarrada assim.
Uma objeto empresa eh sempre o mesmo seja qual for a empresa.
Minha necessidade seria de alguma forma mais simples de mostrar qual foi a empresa em q o log foi disparado.
|
zap |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2008 09:20:35
|
aleck
GUJ Ranger
![[Avatar]](/images/avatar/2051bd70fc110a2208bdbd4a743e7f79.jpg)
Membro desde: 27/03/2006 08:08:33
Mensagens: 843
Localização: Rio de Janeiro
Offline
|
zap wrote:
Eh inviavel para nos. Nao podemos deixar a aplicacao amarrada assim.
Uma objeto empresa eh sempre o mesmo seja qual for a empresa.
Minha necessidade seria de alguma forma mais simples de mostrar qual foi a empresa em q o log foi disparado.
O objeto empresa continua sendo o objeto empresa, porem ele ira possuir uma interface que meramente servira como mapeador para o log devido a sua posicao nos pacotes.
Voce ja deve possuir uma interface para o objeto empresa, o que estou propondo, é a criação de 1 interface para cada empresa, separadas em pacotes com o nome da empresa, assim vc poderia configurar o log4j para gravar em logs separados de acordo com o pacote.
Acredito ser uma solução mais simples do que a concatenação de ids no log.
|
Desenvolvedor iOS/Android
http://blog.alexandresoli.com.br
@alexandresoli |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2008 15:48:27
|
zap
JavaChild
![[Avatar]](/images/avatar/c8cdda0241642ad6b4198.jpg)
Membro desde: 19/03/2004 17:14:23
Mensagens: 127
Localização: Sao Paulo - SP
Offline
|
aleck wrote:
zap wrote:
Eh inviavel para nos. Nao podemos deixar a aplicacao amarrada assim.
Uma objeto empresa eh sempre o mesmo seja qual for a empresa.
Minha necessidade seria de alguma forma mais simples de mostrar qual foi a empresa em q o log foi disparado.
O objeto empresa continua sendo o objeto empresa, porem ele ira possuir uma interface que meramente servira como mapeador para o log devido a sua posicao nos pacotes.
Voce ja deve possuir uma interface para o objeto empresa, o que estou propondo, é a criação de 1 interface para cada empresa, separadas em pacotes com o nome da empresa, assim vc poderia configurar o log4j para gravar em logs separados de acordo com o pacote.
Acredito ser uma solução mais simples do que a concatenação de ids no log.
Entendi. Mas nao posso deixar a aplicacao amarrada com uma interface para cada empresa.
Pois a cada nova empresa que fosse aberta eu teria q alterar a aplicacao. Para uma grande organizacao isso nao eh viavel nem desejavel.
Acho q vou ter que colocar o id da empresa no log mesmo, mas agradeco pela ajuda.
|
zap |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/12/2008 00:03:36
|
RafaelVS
JavaEvangelist
![[Avatar]](/images/avatar/50454f95bbf5e6478cc0a55d08338731.jpg)
Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline
|
Se não houvesse o requisito de colocar o id da empresa no log, você poderia utilizar orientação a aspectos para isolar o interesse de Log. Desta maneira, seu código ficaria mais limpo, sem códigos de log e sem precisar instanciar o Logger e ainda desacoplaria seu código retirando a dependência da API do Log4J.
Havendo o requisito de colocar o id da empresa, ainda é possível utilizar AOP se houver alguma maneira de obter tal informação através de algum método estático, mas se o id da empresa for informado como um parâmetro do método que está sendo logado, então pode ficar complicado escrever um aspecto que consiga obter essa informação.
e é interesse guardar os acessos das empresas, recomendo a separação por pacotes/interfaces.
Exemplo: br.com.empresa1.cadastros.usuario (interface)
br.com.empresa2.cadastros.usuario (interface)
br.com.empresa3.cadastros.usuario (interface)
br.com.interno.cadastros.usuario (implementação)
Assim vc poderia separar os logs por pacotes (br.com.empresa1,2,3)
em arquivos separados (empresa1.log,empresa2.log,empresa3.log).
Acho que o Aleck não percebeu que a empresa provavelmente é uma entidade persistida no banco e que em tempo de compilação não se conhece todas as empresas cadastradas (nem é admissível ter que recompilar o código toda vez que o usuário cadastre/altere/exclua uma nova empresa no sistema), o que torna inviável a solução proposta por ele.
|
- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%) |
|
|
 |
|
|