Obter logs de build com o MSBuild

Usando opções de linha de comando com o MSBuild, você pode especificar quantos dados de build você deseja examinar e se deseja salvar os dados de build em um ou mais arquivos. Você também pode especificar um agente personalizado para coletar dados de build. Para saber mais sobre opções de linha de comando do MSBuild que este tópico não aborda, confira Referência de linha de comando.

Observação

Se você compilar projetos usando o IDE do Visual Studio, poderá solucionar os builds examinando os logs de build. Para obter mais informações, consulte Como exibir, salvar e configurar arquivos de log de build.

Definir o nível de detalhes

Quando você compila um projeto usando MSBuild sem especificar um nível de detalhamento, as seguintes informações aparecem no log de saída:

  • Erros, avisos e mensagens que são classificados como altamente importante.

  • Alguns eventos de status.

  • Um resumo do build.

Usando a opção -verbosity (-v), você pode controlar a quantidade de dados exibida no log de saída. Para solucionar o problema, use um nível de detalhes de detailed (d) ou diagnostic (diag), que fornece o máximo de informações.

O processo de build pode ficar mais lento ao definir o -verbosity para detailed e ainda mais lento se definir o -verbosity para diagnostic.

msbuild MyProject.proj -t:go -v:diag

Configurações de detalhes

A tabela a seguir mostra como os detalhes do log (valores de coluna) afetam quais tipos de mensagem (valores de linha) são registrados em log.

Tipo de mensagem/Detalhamento Quiet Minimal Normal Detalhado Diagnostic
Errors
Warnings
Mensagens de alta prioridade
Mensagens de prioridade normal
Mensagens de baixa prioridade
Informações adicionais do mecanismo MSBuild

Salvar o log de compilação em um arquivo

Você pode usar a opção -fileLogger (fl) para salvar dados de build em um arquivo. O exemplo a seguir salva dados de build em um arquivo chamado msbuild.log.

msbuild MyProject.proj -t:go -fileLogger

No exemplo a seguir, o arquivo de log é denominado MyProjectOutput.log e o detalhamento da saída do log é definida como diagnostic. Especifique essas duas configurações usando a opção -fileLoggerParameters (flp).

msbuild MyProject.proj -t:go -fl -flp:logfile=MyProjectOutput.log;verbosity=diagnostic

Para saber mais, confira Referência de linha de comando.

Salvar a saída de log em vários arquivos

O exemplo a seguir salva o log inteiro em msbuild1.log, apenas os erros em JustErrors.log e apenas os avisos em JustWarnings.log. O exemplo usa números de arquivo para cada um dos três arquivos. Os números de arquivo são especificados logo após as opções -fl e -flp (por exemplo, -fl1 e -flp1).

As opções -fileLoggerParameters (flp) para arquivos 2 e 3 especificam o nome de cada arquivo e o que deve ser incluído em cada um. Nenhum nome foi especificado para o arquivo 1, então o nome padrão de msbuild1.log é usado.

msbuild MyProject.proj -t:go -fl1 -fl2 -fl3 -flp2:logfile=JustErrors.log;errorsonly -flp3:logfile=JustWarnings.log;warningsonly

Para saber mais, confira Referência de linha de comando.

Salvar um log binário

É possível salvar o log em formato binário compactado usando a opção -binaryLogger (bl). Esse log inclui uma descrição detalhada do processo de build e pode ser lido por algumas ferramentas de análise de log.

No exemplo a seguir, é criado um arquivo de log binário com o nome binarylogfilename.

-bl:binarylogfilename.binlog

Você pode usar o visualizador de log estruturado para exibir logs binários de uma maneira que torna muito mais fácil ver o que está acontecendo.

Para saber mais, confira Referência de linha de comando.

Usar um agente personalizado

Você pode escrever seu próprio agente por meio da criação de um tipo gerenciado que implementa a interface ILogger. Você pode usar um agente personalizado, por exemplo, para enviar erros de build por email, registrá-los em um banco de dados ou em um arquivo XML. Para saber mais, confira Agentes de build.

Na linha de comando do MSBuild, você deve especificar o agente personalizado usando a opção -logger. Você também pode usar a opção -noconsolelogger para desabilitar o agente do console padrão.