Partilhar via


Log em um ambiente de processador Multi-

A capacidade de MSBuild 3.5 para usar vários processadores pode diminuir bastante o projeto de construção de tempo, mas também adiciona complexidade ao log. Em um ambiente de processador único, o agente de log pode manipular eventos de entrada, mensagens, avisos e erros de maneira previsível e seqüencial. No entanto, em um ambiente com vários processadores, eventos de várias fontes podem chegar simultaneamente ou fora de seqüência. MSBuild3.5 fornece um novo agente de log de multi-processador-aware e permite a criação de personalizado "encaminhando registradores."

Log de compilações de processador múltiplo

Quando você cria um ou mais projetos em um sistema com vários processadores ou vários núcleos, eventos deMSBuild de compilação para todos os projetos são gerados simultaneamente. Uma avalanche de dados de evento pode chegar ao agente de log ao mesmo tempo ou fora de seqüência. Isso pode sobrecarregar o agente de log e fazer com que os horários de maior compilação, saída de logger incorreta ou até mesmo um build danificado. Para solucionar esses problemas, o MSBuild 3,5 logger pode processar fora de seqüência de eventos e correlacionar eventos e suas fontes.

Você pode melhorar a eficiência de log ainda mais a criação de um agente de log personalizado de encaminhamento. Um agente de log personalizado encaminhamento atua como um filtro, permitindo que você escolha, antes de criar, os eventos que você deseja monitorar. Quando você usa um agente de log personalizado de encaminhamento, eventos indesejados não sobrecarregar o agente de log, truncar os logs ou lenta construir vezes.

Modelo de log central

Para compilações para vários processadores, o MSBuild usa um log central "modelo". O modelo de central de registro, uma instância do MSBuild. exe age como o processo de compilação principal ou o "nó central". Instâncias secundárias do MSBuild. exe ou "nós secundários", são anexados ao nó central. Qualquer registradores de baseados em ILogger conectados ao nó central são conhecidos como "registradores central" e registradores anexados a nós secundários são conhecidos como "registradores secundárias".

Quando uma compilação ocorre, registradores de secundários roteiam seu tráfego de evento para registradores de central. Porque eventos originam em vários nós secundários, os dados chegam no nó central simultaneamente mas intercalados. Para resolver referências de projeto de evento e de destino no evento, os argumentos do evento incluem informações de contexto do evento de compilação adicionais.

Embora somente ILogger é necessária para ser implementado por um agente de log central, recomendamos que você implemente também INodeLogger se você deseja que o agente de log central para inicializar com o número de nós que estão participando da compilação. O seguinte da sobrecarga da Initialize método é chamado quando o mecanismo inicializa o agente de log:

public interface INodeLogger: ILogger
{
    public void Initialize(IEventSource eventSource, int nodeCount);
}

Modelo de log distribuído

No modelo de log central, muito tráfego de mensagens de entrada, como, por exemplo, quando vários projetos ao mesmo tempo, o build pode sobrecarregar o nó central, o que enfatiza o sistema e reduz o desempenho da compilação.

Para reduzir esse problema, MSBuild também permite que um log distribuído "modelo" que estende o modelo de log central, permitindo que você criar os registradores de encaminhamento. Um agente de log de encaminhamento é anexado a um nó secundário e recebe eventos de compilação entrada nesse nó. O agente de log de encaminhamento é como um agente de log normal, exceto que ele pode filtrar os eventos e, em seguida, encaminhar apenas aquelas desejado para o nó central. Isso reduz o tráfego de mensagens no nó central e, portanto, permite um melhor desempenho.

Você pode criar um agente de log de encaminhamento, Implementando o IForwardingLogger interface, que é derivada de ILogger. A interface é definida como:

public interface IForwardingLogger: INodeLogger
{
    public IEventRedirector EventRedirector { get; set; }
    public int NodeId { get; set; }
}

Para encaminhar eventos em um agente de log de encaminhamento, chame o ForwardEvent método o IEventRedirector interface. Passar o apropriado BuildEventArgs, ou obras derivadas, como o parâmetro.

Para obter mais informações, consulte Criação de registradores de encaminhamento..

Anexando um agente de log distribuído

Para anexar um agente de log distribuído em uma versão de linha de comando, use o /distributedlogger (ou, /dl de forma abreviada) switch. O formato para especificar os nomes das classes e tipos de agente de log são as mesmas para o /logger Alternar, exceto que um agente de log distribuído é composto de duas classes de log: um agente de log de encaminhamento e um agente de log central. A seguir é um exemplo de anexar um agente de log distribuído:

C:\ WINDOWS\Microsoft.NET\Framework\v3.5.20301>msbuild.exe *.proj 
/distributedlogger:XMLCentralLogger,MyLogger,Version=1.0.2,
Culture=neutral*XMLForwardingLogger,MyLogger,Version=1.0.2,
Culture=neutral

Um asterisco (*) separa os nomes de dois logger a /dl switch.

Consulte também

Conceitos

Criar Loggers

Criação de registradores de encaminhamento.