Como imprimir números de linha no log. Digamos que ao enviar algumas informações para o log, também quero imprimir o número da linha em que essa saída está no código-fonte. Como podemos ver no rastreamento da pilha, ele exibe o número da linha em que a exceção ocorreu. O rastreamento de pilha está disponível no objeto de exceção.
Outra alternativa pode ser como incluir manualmente o número da linha ao imprimir no log. Existe alguma outra maneira?
Respostas:
De Angsuman Chakraborty :fonte
Acabamos usando uma classe personalizada como esta para o nosso trabalho Android:
fonte
getStackTrace()[3]
, em vez degetStackTrace()[2]
Maneira rápida e suja:
Com mais alguns detalhes:
Isso produzirá algo como isto:
fonte
System.out.println("i am here: " + new Exception().getStackTrace()[0]);
me dá todos os detalhes que eu preciso :)Sou obrigado a responder por não responder à sua pergunta. Suponho que você esteja procurando o número da linha apenas para oferecer suporte à depuração. Existem maneiras melhores. Existem maneiras hackeadas de obter a linha atual. Tudo que eu vi é lento. É melhor usar uma estrutura de log como a do pacote java.util.logging ou log4j . Usando esses pacotes, você pode configurar suas informações de log para incluir o contexto até o nome da classe. Cada mensagem de log seria única o suficiente para saber de onde veio. Como resultado, seu código terá uma variável 'logger' que você chama por
ao invés de
fonte
O Log4J permite incluir o número da linha como parte de seu padrão de saída. Consulte http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html para obter detalhes sobre como fazer isso (o elemento-chave no padrão de conversão é "L"). No entanto, o Javadoc inclui o seguinte:
fonte
O código postado por @ simon.buchan funcionará ...
Mas se você chamá-lo em um método, ele sempre retornará o número da linha no método; portanto, use o snippet de código inline.
fonte
Eu recomendaria o uso de um kit de ferramentas de log, como o log4j . O log é configurável por meio de arquivos de propriedades em tempo de execução, e você pode ativar / desativar recursos como log de número de linha / nome de arquivo.
Examinar o javadoc para o PatternLayout fornece uma lista completa de opções - o que você procura é% L.
fonte
Eu uso esse pequeno método que gera o número de rastreamento e linha do método que o chamou.
Clique duas vezes na saída para ir para a linha de código-fonte!
Pode ser necessário ajustar o valor do nível, dependendo de onde você colocou seu código.
fonte
Util
vem?Você não pode garantir a consistência do número da linha com o código, especialmente se ele for compilado para liberação. Eu não recomendaria o uso de números de linha para esse fim, seria melhor fornecer uma carga útil do local em que a exceção foi gerada (o método trivial é definir a mensagem para incluir os detalhes da chamada do método).
Você pode considerar o aprimoramento de exceção como uma técnica para melhorar o tratamento de exceções http://tutorials.jenkov.com/java-exception-handling/exception-enrichment.html
fonte
Se foi compilado para lançamento, isso não é possível. Você pode procurar algo como o Log4J, que fornecerá automaticamente informações suficientes para determinar de perto onde o código registrado ocorreu.
fonte
primeiro o método geral (em uma classe de utilitário, no código java1.4 antigo e simples, talvez seja necessário reescrevê-lo para java1.5 e mais)
Em seguida, o método utilitário específico para obter o stackElement correto:
fonte
Aqui está o logger que usamos.
envolve o Android Logger e exibe o nome da classe, o nome do método e o número da linha.
http://www.hautelooktech.com/2011/08/15/android-logging/
fonte
Veja este link . Nesse método, você pode pular para o seu código de linha quando clicar duas vezes na linha do LogCat.
Além disso, você pode usar este código para obter o número da linha:
fonte
fonte
Tudo isso fornece os números de linha do seu segmento e método atuais, que funcionam muito bem se você usar uma tentativa de tentar onde espera uma exceção. Mas se você deseja capturar qualquer exceção não tratada, está usando o manipulador de exceção não capturado padrão e o thread atual retornará o número da linha da função do manipulador, não o método de classe que lançou a exceção. Em vez de usar Thread.currentThread (), basta usar o Throwable transmitido pelo manipulador de exceções:
No exemplo acima, use e.getStackTrace () [0] em sua função de manipulador (fShowUncaughtMessage) para obter o agressor.
fonte
O código abaixo é um código testado para a linha de log, nenhum nome de classe e nome do método de onde o método de log é chamado
fonte
O
stackLevel
depende de profundidade que você chamar esse método. Você pode tentar de 0 a um número grande para ver a diferença.Se
stackLevel
for legal, você receberá uma string comojava.lang.Thread.getStackTrace(Thread.java:1536)
fonte
Esse é exatamente o recurso que implementei nesta lib XDDLib . (Mas, é para android)
Um clique no texto sublinhado para navegar para onde o comando log está
Isso
StackTraceElement
é determinado pelo primeiro elemento fora desta biblioteca. Assim, em qualquer lugar fora deste lib vai ser legal, incluindolambda expression
,static initialization block
, etc.fonte
Meu jeito que funciona para mim
fonte
você pode usar -> Reporter.log ("");
fonte