Logcat é uma ferramenta de linha de comando que descarrega um registo de mensagens do sistema, incluindo o traces da pilha quando o evento lança um erro e mensagens que você escreveu no seu aplicativo com oLog
classe.
esta página é sobre a ferramenta de logcat da linha de comandos, mas você também pode ver logmessages a partir da janela Logcat no Android Studio. Para obter informações sobre visualização e filtragem de logs do Android Studio,veja os Logs de escrita e visualização do blogcat.
Logging system overview
the Android logging system is a set of structured circular buffers maintained by the system process logd
. O conjunto de tampões disponíveis é fixo e definido pelo sistema. Os mais relevantes são: main
, que armazena mais de logs de aplicativo, system
, que armazena as mensagens provenientes do sistema operacional Android, e de crash
, que armazena registos de falha. Cada entrada de log tem uma prioridade (um VERBOSE
DEBUG
INFO
WARNING
ERROR
ou FATAL
), uma marca que identifica a origem de registo, e a real mensagem de log.
a interface primária para o sistema de registo é a Biblioteca partilhada liblog
e o seu cabeçalho<android/log.h>
. Todas as instalações de registro específicas da linguagem eventualmente chamam a função __android_log_write
. Por padrão, ele chama a função __android_log_logd_logger
, que envia a entrada de log para logd
usando um socket. Começando com o nível 30 da API, a função de registro pode ser alterada chamando __android_set_log_writer
. Mais informações estão disponíveis na documentação NDK.
Registos apresentados por adb logcat
submeter-se quatro níveis de filtragem:
- tempo de Compilação de filtragem: dependendo das configurações de compilação, alguns registos podem ser completamente removido do binário. Por exemplo, Proguard pode ser configurado para remover chamadas para
Log.d
do código Java. - Filtragem de Propriedades do sistema:
liblog
questiona um conjunto de propriedades do sistema para determinar o nível mínimo de gravidade a ser enviado paralogd
. Se seus registros possuem a tagMyApp
, as seguintes propriedades são verificadas, e deve conter a primeira letra do mínimo de gravidade (V
D
I
W
E
, ouS
para desativar todos os logs):
log.tag.MyApp
persist.log.tag.MyApp
log.tag
persist.log.tag
liblog
uses the minimum priority set by __android_log_set_minimum_priority
. A configuração padrão é INFO
.adb logcat
suporta filtros adicionais que podem reduzir a quantidade de logs mostrados a partir de logd
. Veja abaixo para mais detalhes.sintaxe da linha de comandos
para executar o logcat através da linha de comandos adb, a utilização geral é:
logcat ... ...
pode executar logcat
como um comando adb ou directamente numa linha de comandos do seu emulador ou dispositivo ligado. Para exibir log de saída usando o adb, navegue para o SDK platform-tools/
diretório e execute:
adb logcat
logcat
ajuda on-line, iniciar um dispositivo e, em seguida, execute:
adb logcat --help
Você pode criar um shell de ligação a um dispositivo e executar:
$ adb shell# logcat
opções
a tabela seguinte descreve as opções da linha de comandos de logcat
.
Opção | Descrição | |
---|---|---|
-b <buffer> |
Carregar uma alternativa buffer de log para visualização, como events ou radio . The main system , and crash buffer set is used by default. Ver Os ‘Buffers’ De Registo Alternativos. |
|
-c, --clear |
Clear (flush) the selected buffers and exit. The default buffer set is main system and crash . Para limpar todos os tampões, use -b all -c . |
|
-e <expr>, --regex=<expr> |
imprimir Somente as linhas onde a mensagem de log corresponde <expr> onde <expr> é uma expressão regular. |
|
saiu após impressão<count> número de linhas. Isto é feito para ser emparelhado com --regex , mas irá trabalhar por conta própria. |
||
--print |
Emparelhado com --regex e --max-count para permitir que o conteúdo ignorar o regex filtro, mas ainda parar em certo número de jogos. |
|
-d
|
despeja o tronco no ecrã e nas saídas. | |
-f <filename> |
Write log message output to<filename> . O padrão é stdout . |
|
-g, --buffer-size |
imprime o tamanho do tampão e saídas de log especificados. | |
-n <count> |
define o número máximo de rodados de logs para o <count> . O valor padrão é 4. Necessita da opção -r . |
|
-r <kbytes> |
Rotate the log file every<kbytes> da saída. O valor padrão é 16. Necessita da opção -f . |
|
-s |
Equivalente para a expressão de filtro '*:S' , que define a prioridade para todas as marcas do silêncio, e é usado para preceder uma lista de expressões de filtro que adicione conteúdo. Para saber mais, vá à secção sobre filtrar a saída do registo. |
|
define o formato de saída para mensagens de Registo. O padrão é threadtime formato. Para uma lista de formatos suportados, vá para a seção sobre o formato de saída do log de controle. |
||
-D, --dividers |
Print dividers between each log buffer. | |
-c
|
Flush (clear) todo o registo e saída. | |
-t <count> |
imprime apenas o número mais recente de linhas. Esta opção inclui a funcionalidade -d . |
|
-t '<time>' |
imprimir as linhas mais recentes desde o tempo especificado. Esta opção inclui a funcionalidade -d . Veja a opção-P para obter informações sobre a citação de Parâmetros com espaços incorporados.
adb logcat -t '01-26 20:52:41.820' |
|
-T <count> |
imprime o número mais recente de linhas desde o tempo especificado. Esta opção não inclui -d funcionalidade |
|
-T '<time>' |
de Impressão mais recentes linhas desde o período de tempo especificado. Esta opção não inclui a funcionalidade -d . Veja a opção-P para obter informações sobre a citação de Parâmetros com espaços incorporados.
adb logcat -t '01-26 20:52:41.820' |
|
-L, -last |
Despejo de logs antes de a última reinicialização. | |
-B, --binary |
Output the log in binary. | |
-S, --statistics |
incluem estatísticas na produção para ajudá-lo a identificar e visar os espamadores de log. | |
-G <size> |
define o tamanho do tampão de anel de log. Pode adicionar K ou M no final para indicar kilobytes ou megabytes. |
|
-p, --prune |
Print (ler) a corrente de permitir (white ) e negar (black ), listas de e leva nenhum argumento, da seguinte maneira:
adb logcat -p |
|
-P '<list> ...' |
Write (definir) o permitir (white ) e negar (black ), listas de ajustar o registo de conteúdo para uma finalidade específica. Você forneça um conteúdo misto do permitidas (<white> ) e negado (~<black> lista de entradas, onde <white> ou <black> pode ser um UID de UID/PID /ou PID. Com a orientação do logcat estatísticas (logcat -S ), pode-se considerar os ajustes para permitir (white ) e negar (black ), listas para fins, tais como:
por padrão, o sistema de Registo impede automaticamente o pior ofensor nas estatísticas de Registo dinamicamente de criar espaço para novas mensagens de Registo. Uma vez esgotada a heurística, o sistema extrai as entradas mais antigas para criar espaço para as novas mensagens. A adição de uma lista de permissões ( Citações $ adb logcat -P '"<white_and_blacklist>"'oradb shell$ logcat -P '<white_and_blacklist>' O exemplo a seguir especifica um permitir ( adb logcat -P '"/32676 675 ~/32677 897"' Outras permitir ( ~! worst uid blacklist~1000/! worst pid in system (1000) |
|
--pid=<pid> ... |
Apenas registos de impressão a partir do dado de PID. | |
--wrap |
Sleep durante 2 horas ou quando o buffer está prestes a terminar o que vier primeiro. Melhora a eficiência das sondagens, proporcionando um despertar quase por terminar. |
filtrando a saída de log
- a marca de uma mensagem de log é uma cadeia curta que indica o componente do sistema do qual a mensagem se origina (por exemplo,” ver ” para o sistema de visualização).
- A prioridade é um dos caracteres seguintes valores, ordenados do menor para o maior de prioridade:
-
-
V
: – Verbose (prioridade mais baixa) -
D
: Debug -
I
Info -
W
: Aviso -
E
Erro: -
F
: Fatal -
S
: Silencioso (prioridade mais alta, em que nada é impresso)
-
Você pode obter uma lista de tags utilizadas no sistema, com prioridades, executando logcat e observando as duas primeiras colunas de cada mensagem, dada como <priority>/<tag>
.
o seguinte é um exemplo de saída rápida logcat obtida com o comando logcat -v brief output
. Mostra que a mensagem se relaciona com o nível prioritário ” I “e tag “ActivityManager”:
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}
para reduzir a saída de log para um nível gerenciável, você pode restringir a saída de log usando expressões de filtro. As expressões do filtro permitem-lhe indicar ao sistema as marcas — combinações de prioridade que lhe interessam-o sistema suprime outras mensagens para as marcas indicadas.
Uma expressão de filtro segue este formato tag:priority ...
, onde tag
indica a marca de interesse e priority
indica o nível mínimo de prioridade para o relatório para a marca. As mensagens para essa marca em ou acima da prioridade indicada são escritas no registo. Você pode fornecer qualquer número de especificações tag:priority
numa única expressão de filtro. A série de especificações é delimitada em espaços em branco.
Aqui está um exemplo de uma expressão de filtro que suprime todas as mensagens de Registo, excepto aquelas com a marca “ActivityManager”, na prioridade “Info” ou acima, e todas as mensagens de registo com a marca “MyApp”, com a prioridade “Debug” ou acima:
adb logcat ActivityManager:I MyApp:D *:S
O elemento final na expressão acima, *:S
, define o nível de prioridade para todas as marcas para “silêncio”, assim, garantir que apenas mensagens de log com “ActivityManager” e “MyApp” são exibidos. O uso de *:S
é uma excelente maneira de garantir que a saída de log está restrita aos filtros que você especificou explicitamente — permite que seus filtros sirvam como uma lista de permissões para a saída de log.
a seguinte expressão do filtro mostra todas as mensagens de registo com o nível de prioridade “aviso” e superior, em todas as marcas:
adb logcat *:W
Se você estiver executando o logcat a partir do seu computador de desenvolvimento (em vez de executá-lo em um controle remoto adb shell), você também pode definir um padrão de expressão de filtro por exportar um valor para a variável de ambiente ANDROID_LOG_TAGS
:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
Note que ANDROID_LOG_TAGS
filtro não é exportado para o emulador de dispositivo/exemplo, se você estiver executando o logcat a partir de um shell remoto ou usando adb shell logcat
.
Control log output format
Log messages contain a number of metadata fields, in addition to the tag and priority. Você pode modificar o formato de saída das mensagens para que elas exibam um campo de meta-dados específico. Para o fazer, você usa a opção -v
e especifica um dos formatos de saída suportados listados abaixo.
-
brief
: mostrar a prioridade, etiqueta e PID do processo que emite a mensagem. -
long
: Mostrar todos os campos de meta-dados e separar as mensagens com linhas em branco. -
process
: Mostrar apenas o PID. -
raw
: mostra a mensagem de Registo raw sem outros campos de meta-dados. -
tag
: mostra apenas a prioridade e a marca. -
thread:
um formato legado que mostra a prioridade, PID e TID do tópico que emite a mensagem. -
threadtime
(por omissão): mostra a data, hora de Invocação, prioridade, marca, PID e TID do tópico que emite a mensagem. -
time
: mostrar a data, hora de Invocação, prioridade, marca e PID do processo que emite a mensagem.
Ao iniciar o logcat, você pode especificar o formato de saída que você deseja usando o -v
opção:
logcat
Aqui está um exemplo que mostra como gerar as mensagens no thread
formato de saída:
adb logcat -v thread
Note que você só pode especificar um formato de saída com o -v
opção, mas você pode especificar como muitos modificadores que fazem sentido. O Logcat ignora modificadores que não fazem sentido.
modificadores de formato
modificadores de formato alteram a saída do logcat em termos de qualquer combinação de um ou mais dos seguintes modificadores. Para especificar um modificador de formato, use a opção -v
, do seguinte modo:
adb logcat -b all -v color -d
cada mensagem de registo do Android tem uma marca e uma prioridade associada a ela. Você pode combinar qualquer modificador de formato com qualquer uma das seguintes opções de formato: brief
long
process
raw
tag
thread
threadtime
, and time
.
You can get the format modifier details by typing logcat -v --help
at the command line.
-
color
: Show each priority level with a different color. -
descriptive
: Show log buffer event descriptions. Este modificador afeta apenas as mensagens de buffer de log de eventos, e não tem efeito nos outros buffers não-binários. As descrições dos eventos vêm da base de dados de log-tags dos eventos. -
epoch
: tempo de visualização em segundos a partir de 1 de Janeiro de 1970. -
monotonic
: tempo de visualização nos segundos do CPU a partir do último arranque. -
printable
: assegurar que qualquer conteúdo binário de registo é escapado. -
uid
: se permitido por controles de acesso, exibir o ID UID ou Android do processo logado. -
usec
: mostrar o tempo com precisão até microssegundos. -
UTC
: hora de visualização como UTC. -
year
: adicionar o ano à hora indicada. -
zone
: adicionar o fuso horário local à hora indicada.
Visualização alternativa de buffers de log
O Android, sistema de log mantém vários buffers circulares para mensagens de log, e nem todas as mensagens de log são enviadas para o padrão do buffer circular. Para ver as mensagens de registo adicionais, poderá executar a opção logcat
com o comando -b
, para solicitar a visualização de um buffer circular alternativo. Você pode ver qualquer um destes buffers alternativos:
-
radio
: ver o buffer que contém mensagens relacionadas com rádio/telefonia. -
events
: ver as mensagens interpretadas de buffer de eventos do sistema binário. -
main
: ver o buffer de Registo principal (por omissão) não contém mensagens de registo do sistema e do estoiro. -
system
: Ver o buffer de registo do sistema (por omissão). -
crash
: ver o buffer de registo de estoiros (por omissão). -
all
: ver todos os tampões. -
default
Relatóriosmain
system
ecrash
buffers.
a utilização do -b
a opção é:
logcat
Aqui está um exemplo de como ver um tampão de log contendo mensagens de rádio e de telefonia:
adb logcat -b radio
Você também pode especificar vários -b
sinalizadores para todos os buffers você deseja imprimir, da seguinte forma:
logcat -b main -b radio -b events
Você pode especificar um único -b
bandeira com uma lista separada por vírgulas de buffers, por exemplo:
logcat -b main,radio,events
o Log do código
Log
classe permite que você crie entradas de log em seu código que apresentar no logcat ferramenta. Os métodos comuns de Registo incluem:
-
Log.v(String, String)
(verbose) -
Log.d(String, String)
(debug) -
Log.i(String, String)
(information) -
Log.w(String, String)
(warning) -
Log.e(String, String)
(error)
For example, using the following call:
Kotlin
Log.i("MyActivity", "MyClass.getView() — get item number $position")
Java
Log.i("MyActivity", "MyClass.getView() — get item number " + position);
The logcat outputs something like:
I/MyActivity( 1557): MyClass.getView() — get item number 1