Pergunta

Eu tenho um aplicativo Java que é executado em duas máquinas em um cluster e ambas fazem login em um banco de dados MySQL. Tudo funciona bem, mas eu gostaria de ter um campo adicional no banco de dados que representa o IP de onde vêm as solicitações.
Eu resolvi isso tendo dois arquivos diferentes de log4j.properties, mas acho que há uma maneira mais agradável de fazer isso?

Esta é a linha no arquivo log4j.properties que é diferente nas máquinas:

log4j.appender.DB.sql=INSERT INTO log4j (date, category, priority, server, message) VALUES ('%d{dd MMM yyyy HH:mm:ss,SSS}','%c','%p','10.20.30.40','%m')

Existe algo para mysql como conexão_ip? Ou um espaço reservado no log4j, para que eu possa armazenar o IP lá no aplicativo Java?

Saúde, Lukas

Foi útil?

Solução

Eu resolvi isso usando o contexto de diagnóstico mapeado do log4j. Quando inicio o aplicativo Java, guardo o IP com este comando.

MDC.put("serverIP", InetAddress.getLocalHost().getHostAddress());

E agora posso usar o %x {serverip} como um espaço reservado no meu arquivo log4j.properties.

log4j.appender.DB.sql=INSERT INTO log4j (date, category, priority, server, sessionID, message) VALUES ('%d{dd/MM/yyyy HH:mm:ss,SSS}','%c','%p','%X{serverIP}','%X{sessionID}','%m')

Aqui está um excelente post sobre log4j com alguns bons exemplos
http://onjava.com/pub/a/onjava/2002/08/07/log4j.html?page=3

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top