Maybaygiare.org

Blog Network

Logcat command-line tool

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 VERBOSEDEBUGINFOWARNINGERROR 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 libloge 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:

  1. 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.
  2. Filtragem de Propriedades do sistema: liblogquestiona um conjunto de propriedades do sistema para determinar o nível mínimo de gravidade a ser enviado paralogd. Se seus registros possuem a tag MyApp, as seguintes propriedades são verificadas, e deve conter a primeira letra do mínimo de gravidade (VDIWE, ou S para desativar todos os logs):
  • log.tag.MyApp
  • persist.log.tag.MyApp
  • log.tag
  • persist.log.tag
  • Aplicação de filtragem: If none of the properties are set, liblog uses the minimum priority set by __android_log_set_minimum_priority. A configuração padrão é INFO.
  • Exibição de filtragem: 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 mainsystem, 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 mainsystem 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> ...'
    --prune '<list> ...' -P '<white_and_black_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:

    • Dar a maior longevidade para log específico de conteúdo através UID seleções.
    • impeça alguém (UID) ou algo (PID) de consumir estes recursos para ajudar a aumentar o logspan para que possa ter mais visibilidade nos problemas que está a diagnosticar.

    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 (whitelist) protege o seu número de identificação Android (AID), que se torna a ajuda dos processos e o GID de ser declarado um ofensor, e a adição de um denilista ajuda a libertar espaço antes que os piores infractores sejam considerados. Você pode escolher o quão ativa é a poda, e você pode desligar a poda para que ela só remova o conteúdo das entradas mais antigas em cada buffer de log.

    Citações

    adb logcat não preservar as cotações, de modo a sintaxe para especificar permitir (white) e negar (black) lista é a seguinte:

    $ adb logcat -P '"<white_and_blacklist>"'oradb shell$ logcat -P '<white_and_blacklist>'

    O exemplo a seguir especifica um permitir (white) lista com PID 32676 e UID 675, e negar um (black) lista com PID 32677 e UID 897. PID 32677 no denilista é ponderado para uma poda mais rápida.

    adb logcat -P '"/32676 675 ~/32677 897"'

    Outras permitir (white) e negar (black) comando da lista de variações, que você pode utilizar são as seguintes:

    ~! 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: brieflongprocessrawtagthreadthreadtime, 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órios mainsystem e crash 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

    Deixe uma resposta

    O seu endereço de email não será publicado.