Olá!
Seguinte estou querendo tentar centralizar o log em um unico metodo, nele eu deveria receber o método que o chamou.
Estaticamente isto até é possível, apesar de só conseguir pegar o nome do método e pode haver mais de um com mesmo nome, o que acontece muito no meu caso… Mas além disto eu precisava pegar o método em runtime ou seja não pegar o método e saber quais os parâmetros que ele recebe e sim recuperar os valores reais que lhe foram passados e também os nomes dados a seus parâmetros. Algo mais ou menos assim:
ClasseA{
public void fazNada(int i, String s){
//ocorre um erro, chama o log
ClasseLog.log();//tentar evitar ao máximo enviar parametros,, tentar recuperar dinamicamente
}
}
ClasseLog{
public void log(){
//pelo stack trace recupero a string do metodo que chamou o log() mas não consigo obter o objeto em si
logger.error("mensagem"+metodo+paramNome1+paramValor1,paramNome2+paramValor2,paramNome3+paramValor3...);
}
}
Sei que o log4j até consegue obter o nome do método, mas o nome dado aos parâmetros e seus valores ele não faz (eu acho).
Alguém já tentou algo assim? Mesmo que alguns julguem que não é um bom caminho para executar os logs (o que provavelmente acho que será a maioria das respostas), eu realmente quero tentar este caminho e não gostaria de ser impedido por uma limitação da linguagem, assim se souberem como fazer, por favor, compartilhem
Detalhando mais: Sei que poderia chamar o log passando um tipo de chave/valor com nomeParam/valorParam, mas não queria que meu metodo tivesse que fazer esses tratamentos até pq são muitos e está dificil de automatizar e garantir que está tudo ok, pq acaba sendo um copia/cola danado dessa parte do código e sempre algo acaba passando batido e não posso lá na frente recuperar no log um erro que indica um metodo/valores errados do real.