Bom tarde.
Pessoal estou tentando desenvolver uma classe que ira logar a pilha de execuções da aplicação quando esta roda no servidor.
Minha idéira era colocar um Filter ou um Listener(a nivel de request, ou outro caso funcionar), e logar todas as classes qu estão sendo executadas e metodos.
Com isso poderiamos fazer um log de nossa aplicação, somente nos casos onde a aplicação alcançasse um alto nivel de uso de memória.
Desta forma saberiamos quais metodos de quais classes estão contribuindo para isso.
Tentei pegando a Thread corrent mas esta não funciona, depois peguei um mapa com todos os stackTreaces, mas tabmém não logo o que necesisto.
Abaixo segue o metodo um, buscando da Thread em execução:
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
for (int i = stack.length - 1; i >= 2; i--) {
if (!stack[i].getFileName().startsWith("LogListener") ) {
string.append(stack[i].getFileName() + ":" + stack[i].getLineNumber() + "->" + stack[i].getClassName() + "." + stack[i].getMethodName() + "()").append("\n");
}
}
Não logou as classes da app que rodava, com isso peguei um mapa de todos os stackTraces e mesmo assim não funcionou.
Segue metodo 2:
for (Map.Entry<Thread, StackTraceElement[]> stacks : Thread.getAllStackTraces().entrySet()) {
StackTraceElement[] stack = stacks.getValue();
for (int i = stack.length - 1; i >= 2; i--) {
if (!stack[i].getFileName().startsWith("LogListener") ) {
string.append(stack[i].getFileName() + ":" + stack[i].getLineNumber() + "->" + stack[i].getClassName() + "." + stack[i].getMethodName() + "()").append("\n");
}
}
}
Se alguem souber como se faz ou tiver outra forma de realizar isso me seria de grande ajuda.
Desde ja agradeço.