Existe um método para se obter a função corrente?

9 respostas
andre_teprom

Pessoal,

Existe algo semelhante ao getClass(), mas que ao invéz disso, me informe o nome da função onde estou ?
A idéia é aplicar o resultado no logger e assim, além de saber a classe, saberei qual a função dessa classe também.

+++

9 Respostas

LPJava

tem algo com reflection que dar para saber sim, mas depois que getClass() se vc colcoar um ponto o que tem?

pesquisa tb sobre reflection em java.

A

Não sei se entendi o que você precisa, mas veja se este cara te ajuda:

Thread.currentThread().getStackTrace()
andre_teprom

Bom, não retornou exatamente o que eu precisava, mas valeu pelas dicas.

A

E do que exatamente precisava?

Pode dar um exemplo?

As entradas e saídas que espera…

andre_teprom

Então…

O logger que eu uso ( log4j ) naturalmente já identifica a Classe de onde está sendo usado, e adiciona isso á cada linha de registro.
Entretanto, eu gostaria que além disso, informasse de que função dentro dessa classe, está sendo chamado.
Como essa funcionalidade não está presente no log4j, eu gostaria de coletar essa informação ( se fosse possível obter essa informação no Java ) e a adicionar tetualmente no Log.

Exemplo :

Suponha que eu tenha a seguinte estrutura.

Classe ClasseExemploA { ... função Funcao1AExemplo{ } função Funcao2AExemplo{ } } Classe ClasseExemploB { ... função Funcao1BExemplo{ } função Funcao2BExemplo{ } }
Quando eu coloco o logger dentro de cada função de cada classe, na saída, já informa a classe onde está instanciado, pois isso já é um recurso do logger.
Entretanto, eu gostaria de também informar o nome da função de onde está sendo instanciado ( caso tivesse como eu obter essa informação no Java )

Eu queria algo semelhante a isso :

System.out.println(this.getClass().getSimpleName() ) ; so que ao invez de obter a classe, eu queria a função.

Se for necessário, posso criar um código-exemplo na linguagem do Java, mas achei que assim ficaria mais claro.

+++

Edufa

Aqui tem algumas informações ideias e discussões sobre isto:

http://blog.kaiec.org/2009/02/13/determine-current-method-in-java/

http://www.coderanch.com/t/369157/java/java/Printing-Current-Method-Name

esmiralha

andre_teprom:
Então…

O logger que eu uso ( log4j ) naturalmente já identifica a Classe de onde está sendo usado, e adiciona isso á cada linha de registro.
Entretanto, eu gostaria que além disso, informasse de que função dentro dessa classe, está sendo chamado.
Como essa funcionalidade não está presente no log4j, eu gostaria de coletar essa informação ( se fosse possível obter essa informação no Java ) e a adicionar tetualmente no Log.

Exemplo :

Suponha que eu tenha a seguinte estrutura.

Classe ClasseExemploA { ... função Funcao1AExemplo{ } função Funcao2AExemplo{ } } Classe ClasseExemploB { ... função Funcao1BExemplo{ } função Funcao2BExemplo{ } }
Quando eu coloco o logger dentro de cada função de cada classe, na saída, já informa a classe onde está instanciado, pois isso já é um recurso do logger.
Entretanto, eu gostaria de também informar o nome da função de onde está sendo instanciado ( caso tivesse como eu obter essa informação no Java )

Eu queria algo semelhante a isso :

System.out.println(this.getClass().getSimpleName() ) ; so que ao invez de obter a classe, eu queria a função.

Se for necessário, posso criar um código-exemplo na linguagem do Java, mas achei que assim ficaria mais claro.

+++

Use %M no pattern layout do seu logger. Mas cuidado, essa operação é custosa pra caramba e vai comer a performance da sua aplicação.

andre_teprom

Pessoal,

A propósito, também percebi que o log4j, além de muito complicado, é realmente meio ‘pesado’ no processamento.
Decidi fazer um logger no braço para gravar no arquivo e apresentar no console, e o desenvolvimento está saindo muito mais rápido que com essa API.
Segue como implementei a captura do nome da classe e do método corrente :

String ThreadAtual = Thread.currentThread().getName().toString() ; // "main" String MetodoAtual = new Exception().getStackTrace()[0].getMethodName() ; // "AcessoFTP" ThreadAtual = ThreadAtual + "." + MetodoAtual ; // concatena "main.AcessoFTP" System.out.Println( ThreadAtual ); // main.AcessoFTP

Agora o próximo passo será pensar em como sobrecarregar essa string ás strings de métodos de hierarquias subsequentes sucessivamente.
( Meu primeiro palpite, seria brincar com o argumento do getStackTrace()[i] )

Muito Obrigado pelas dicas.

+++

esmiralha

O padrão do mundo Java é usar log4j. Melhor se acostumar com ele. :slight_smile:

Criado 12 de janeiro de 2011
Ultima resposta 15 de jan. de 2011
Respostas 9
Participantes 5