LOG4J: uma boa estratégia de looging para uma aplicação web

olá, senhores!!

desenvolvi uma aplicação web SaaS na minha empresa utilizando JSF2, JPA2 e GlassFish3.1. Mas agora vi que preciso montar um esquema de logging pra por a aplicação no ambiente produção, porém não tenho nenhuma experiencia em estratégia de logging.

comecei estudando um pouco de log4j e montei um esquema simples que registra data, hora, nome e cpf do usuario logado e a respectiva mensagem tal como segue (o arquivo “rola” de 6 em 6 horas):

log4j.appender.ControllerAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ControllerAppender.File=C:/ged/logFiles/gedLog.log
log4j.appender.ControllerAppender.DatePattern='.'yyyy-MM-dd-HH-a
log4j.appender.ControllerAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.ControllerAppender.layout.ConversionPattern= %p %d{dd MMM yyyy HH:mm:ss} - %X{userName} - %X{userCpf} : %m%n
log4j.rootLogger = INFO, ControllerAppender
log4j.rootLogger = ERROR, ControllerAppender

não sei se essa é a mellhor opção.

Cheguei a pensar em criar um arquivo de log poor usuario, cada vez que o mesmo logasse, mas acho q não seria eficiente.

Alguém poderia dizer como seria uma boa estrátégia de logging pra uma aplicação web ??

vaelu

Depende do objetivo com o log.

Vc quer apenas dizer quais ações cada usuário fez ou fazer um log de exceções e ações que seu sistema faz?

Mitidiero, os objetivos principais seriam dois: facilitar o rastreamento de erros (exceções) agilizando a implementação de uma solução; o outro objetivo seria monitorar as ações do usuario logado no que se refere a eventos envolvendo as regras de negócios mais importantes do sistema

Cara, desculpe atrapalhar o seu topico mas nao resisti, como voce fez pra passar esses parametros de usuario e cpf pro log?

Todas as vezes que tentei fazer isso, não compreendi direito como fazer pela documentação :lol: e deixei quieto.

Sobre a estrategia de log, pq voce acha que essa nao é uma boa abordagem? Eu costumo fazer dessa forma aí e até agora me atendeu.

Valeu mano.

parceiro, vc pode colocar parametros no contexto seguindo o modelo chave/valor atráves do método put() da classe org.apache.log4j.MDC. Quando vc configura o arquivo properties, vc referencia a chave, o respectivo valor vc coloca em tempo de execução.
Exemplo:

private void setUpLog4J() {                           
        PropertyConfigurator.configure("log4j.properties");        
        MDC.put("userName", usuario.getNome());
        MDC.put("userCpf", usuario.getCpf());
    }

quando o usuario sair, vc chama o método clear()

sobre a estratégia que criei, não disse que não é boa, disse que não tenho certeza se seria a mais adequada pra uma aplicação web, visto que nunca mexi com log4j

postei pra saber como o pessoal tem feito em situações como a minha

sugestões ??? :smiley:

valeu

Bom… Para cada objetivo uma solução, certo?

Para monitorar os usuários vc pode utilizar duas soluções:

1 - Um arquivo para cada usuário, como vc mesmo disse
2 - Um arquivo para cada funcionalidade do sistema, registrando quem fez, o que fez e etc… sempre de um modo padrão pra facilitar a busca.

Para solucionar a questão de exceções, eu recomendo fazer por funcionalidade e definindo o tipo de log, igual o log4j fornece, se é warning, se é crítico e etc.

No caso, o ideal é manter em 2 pastas separadas

SISTEMA e USUARIOS por exemplo.

Eu gosto de fazer dessa maneira e percebo muitas pessoas utilizando assim.

Eu faria diferente, se no caso monitorar o usuário faz parte da regra de negócio, eu criaria um model especifico e jogaria isso no banco pois poderia usar essas informações no meu sistema.

Agora para facilitar o rastreamento de erros (exceções) eu criaria um logger que gerasse um arquivo por dia,

log4j.appender.fileOut.DatePattern=yyyy-MM-dd