Поделиться через


Написание средств ведения журнала с поддержкой многопроцессорности

Обновлен: Ноябрь 2007

Предоставленная в MSBuild 3.5 поддержка нескольких процессоров позволяет сократить время построения проекта, но усложняет ведение журнала событий построения. В среде с одним процессором события, сообщения, предупреждения и ошибки поступают в средство ведения журнала последовательно и вполне предсказуемо. Но в многопроцессорной среде события из различных источников могут поступать одновременно или не по порядку. В связи с этим в MSBuild 3.5 предлагается средство ведения журнала с поддержкой многопроцессорности и новая модель ведения журнала, а также возможность создания пользовательских "средств ведения журнала переадресации".

Основные проблемы ведения журналов в многопроцессорной среде

Если выполняется построение одного или нескольких проектов в многопроцессорной или многоядерной системе, в MSBuild одновременно создаются события для всех проектов. Множество сообщений о событиях может поступать в средство ведения журнала одновременно или не по порядку. Поскольку средство ведения журнала MSBuild 2.0 не предназначено для обработки этой ситуации, может произойти переполнение средства ведения журнала, которое повлечет за собой увеличение времени построения, неверные выходные данные в средстве ведения журнала или даже повреждение построения. Для решения этих проблем в средстве ведения журнала MSBuild 3.5 предусмотрена возможность обработки событий не по порядку и соотнесения событий с их источниками.

Чтобы повысить эффективность функции ведения журнала, создайте пользовательское средство ведения журнала переадресации. Созданное пользователем средство ведения журнала переадресации действует как фильтр, позволяя выбрать перед построением только те события, за которыми нужно вести наблюдение. Благодаря пользовательскому средству ведения журнала переадресации можно предотвратить переполнение средства ведения журнала ненужными событиями, загромождение журналов или замедление построения.

Модели ведения журналов в многопроцессорной среде

Для решения проблем построения в многопроцессорной среде MSBuild 3.5 поддерживает две модели — централизованную и распределенную.

Централизованная модель ведения журнала

В централизованной модели ведения журнала основной экземпляр MSBuild.exe действует как "центральный узел", а дочерние экземпляры центрального узла ("дополнительные узлы") подключаются к центральному узлу, чтобы оказать помощь в выполнении задач построения.

Централизованная модель средства ведения журнала

Средства ведения журнала различного типа, подключаемые к центральному узлу, называются "центральными средствами ведения журнала". Только один экземпляр средства ведения журнала каждого типа можно подключить к центральному узлу в одно время.

В процессе построения дополнительные узлы перенаправляют события построения в центральный узел. Центральный узел перенаправляет все свои события, а также события дополнительных узлов, в одно или несколько подключенных центральных средств ведения журнала. В средствах ведения журнала создаются файлы журнала на основе входящих данных.

Несмотря на то, что центральным средством ведения журнала должна быть реализована только задача ILogger, рекомендуется также реализовать задачу INodeLogger для инициализации центрального средства ведения журнала с учетом числа узлов, участвующих в построении. При инициализации средства ведения журнала в системе вызывается следующая перегрузка метода Initialize:

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

Все предшествующие средства ведения журнала, поддерживающие ILogger, могут работать в качестве центральных средств ведения журнала и подключаться к построению. Однако центральные средства ведения журнала, созданные без явной поддержки сценариев ведения журнала в многопроцессорной среде и непоследовательных событий, могут привести к прерыванию построения или появлению бессмысленных выходных данных.

Распределенная модель ведения журнала

В централизованной модели ведения журнала слишком большой трафик входящих сообщений может вызывать переполнение центрального узла, например, когда одновременно выполняется построение множества проектов. При этом может увеличиться нагрузка на системные ресурсы и снизиться производительность построения. Для решения этой проблемы в MSBuild 3.5 поддерживается распределенная модель ведения журнала.

Распределенная модель ведения журнала

Распределенная модель ведения журнала расширяет централизованную модель, позволяя создавать средства ведения журнала переадресации.

Средства ведения журнала переадресации

Средство ведения журнала переадресации — это дополнительный, облегченный вариант средства ведения журнала, содержащий фильтр событий, который подключается к дополнительному узлу и принимает входящие события построения от этого узла. В этом средстве выполняется фильтрация входящих событий и переадресация в центральный узел только тех из них, которые представляют интерес для пользователя. В результате уменьшается трафик сообщений, отправляемых в центральный узел, и повышается общая производительность построения.

Существует два способа использования модели распределенного ведения журнала, а именно:

  • Настройка готового средства ведения журнала переадресации с именем ConfigurableForwardingLogger.

  • Создание собственного средства ведения журнала переадресации.

Можно изменить ConfigurableForwardingLogger в соответствии со своими предпочтениями. Для этого вызовите средство ведения журнала в командной строке с помощью MSBuild.exe и перечислите события построения, которые средству ведения журнала следует переадресовать в центральный узел.

Можно также создать пользовательское средство ведения журнала переадресации. Благодаря созданию пользовательского средства ведения журнала переадресации можно выполнить точную настройку функций средства ведения журнала. Однако этот способ гораздо сложнее, чем простая настройка готового ConfigurableForwardingLogger. Дополнительные сведения см. в разделе Создание средства ведения журнала переадресации.

Использование ConfigurableForwardingLogger для простого распределенного ведения журнала

Чтобы подключить либо ConfigurableForwardingLogger, либо пользовательское средство ведения журнала переадресации, используйте ключ /distributedlogger (сокращенно /dl) в командной строке MSBuild.exe в процессе построения. Для указания имен типов и классов средства ведения журнала используется тот же формат, что и для ключа /logger, с той лишь разницей, что распределенное средство ведения журнала всегда включает два класса: средство ведения журнала переадресации и центральное средство ведения журнала. В приведенном ниже примере показано, как подключить пользовательское средство ведения журнала переадресации с именем XMLForwardingLogger.

C:\ WINDOWS\Microsoft.NET\Framework\v3.5>msbuild.exe myproj.proj/distributedlogger:XMLCentralLogger,MyLogger,Version=1.0.2,Culture=neutral*XMLForwardingLogger,MyLogger,Version=1.0.2,Culture=neutral
Bb651795.alert_note(ru-ru,VS.90).gifПримечание.

В ключе /dl имена двух средств ведения журнала необходимо отделить звездочкой (*).

ConfigurableForwardingLogger используется точно так же, как и любое другое средство ведения журнала (см. описание в разделе Общие сведения о средстве ведении журнала в MSBuild), с той лишь разницей, что вместо обычного средства ведения журнала MSBuild подключается средство ведения журнала ConfigurableForwardingLogger и в качестве параметров указываются события, которые ConfigurableForwardingLogger будет передавать в центральный узел.

Например, чтобы получать уведомления только о начале и окончании построения, а также сообщения об ошибках, следует передать в качестве параметров события BUILDSTARTEDEVENT, BUILDFINISHEDEVENT и ERROREVENT. Можно передавать несколько параметров, отделяя их друг от друга точкой с запятой. В приведенном ниже примере показано, как использовать ConfigurableForwardingLogger для переадресации только событий BUILDSTARTEDEVENT, BUILDFINISHEDEVENT и ERROREVENT.

C:\ WINDOWS\Microsoft.NET\Framework\v3.5>msbuild.exe myproj.proj /distributedlogger:XMLCentralLogger,MyLogger,Version=1.0.2,Culture=neutral*ConfigureableForwardingLogger,C:\My.dll;BUILDSTARTEDEVENT; BUILDFINISHEDEVENT;ERROREVENT

Далее представлен список доступных параметров ConfigurableForwardingLogger.

Параметры ConfigurableForwardingLogger

BUILDSTARTEDEVENT

BUILDFINISHEDEVENT

PROJECTSTARTEDEVENT

PROJECTFINISHEDEVENT

TARGETSTARTEDEVENT

TARGETFINISHEDEVENT

TASKSTARTEDEVENT

TASKFINISHEDEVENT

ERROREVENT

WARNINGEVENT

HIGHMESSAGEEVENT

NORMALMESSAGEEVENT

LOWMESSAGEEVENT

CUSTOMEVENT

COMMANDLINE

PERFORMANCESUMMARY

NOSUMMARY

SHOWCOMMANDLINE

См. также

Основные понятия

Создание средства ведения журнала переадресации