какое содержимое представлено значением LogicalOperationStack TraceOutputOptions - PullRequest
2 голосов
/ 05 апреля 2011

В корпоративной библиотеке Microsoft 5, я использую функцию ведения журнала, при использовании я наткнулся на значение трассировки «LogicalOperationStack».Когда я гуглил по этой ссылке, я получил эту ссылку: http://msdn.microsoft.com/en-us/library/system.diagnostics.traceeventcache.logicaloperationstack.aspx

Но содержание, представленное в этой ссылке, кажется мне жаргонным.Может ли кто-нибудь дать мне понять, что это такое и какие данные мы получаем из этого.Пожалуйста, объясните мне, помня, что я новичок в .net.

Спасибо

1 Ответ

2 голосов
/ 05 апреля 2011

Ключевым моментом, на который стоит обратить внимание, является CorrelationManager.

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

Логические операции также могут быть вложенными. Свойство LogicalOperationStack выставляет стек вложенных логических операции тождества. Каждый звонок в Метод StartLogicalOperation выдвигает новая логическая идентификация операции на стек. Каждый звонок в Метод StopLogicalOperation выскакивает логическая операция идентичности от стек.

Итак, по сути, CorrelationManager позволяет вам назначать информацию потоку. Эта информация может использоваться для сопоставления информации в файлах журнала. Поскольку информация находится в потоке, она доступна для входа любым способом.

Хорошо, так что я не думаю, что я развеял жаргон. :)

Вот пример:

class Program
{
    static void Main(string[] args)
    {
        Trace.CorrelationManager.StartLogicalOperation(Guid.CreateGuid());
        Trace.CorrelationManager.StartLogicalOperation("TransferMoney");

        TransferMoney();

        Trace.CorrelationManager.StopLogicalOperation();
        Trace.CorrelationManager.StopLogicalOperation();
    }

    static void TransferMoney()
    {
        DebitAccount();
        WireMoney();
    }
}

Теперь, если методы DebitAccount и WireMoney регистрируют сообщения, тогда Guid (AKA Activity ID) и логическое имя операции будут записываться вместе с остальной частью сообщения.

Это может позволить вам проследить один запрос через все ваши системные уровни, отслеживая идентификатор активности. Вы также можете использовать логическое имя для анализа журналов, чтобы увидеть шаблоны использования и производительность с логической точки зрения.

На корпоративной библиотеке. Корпоративная библиотека добавит значения LogicalOperationStack в выходные данные журнала (если настроено):

LogicalOperationStack = TransferMoney, b63e2f03-5433-40a2-9de5-6232d3aa7f68

, а также добавление каждого значения LogicalOperationStack в список категорий:

Категория: General, TransferMoney

Обратите внимание, что TraceOutputOptions не выводятся в EventLog TraceListener. Это может свести вас с ума, если вы пытаетесь понять, почему они не появляются. :)

Корпоративная библиотека уже имеет класс Tracer, который обеспечивает функциональность, эквивалентную приведенному выше коду (плюс возможность регистрировать сообщения трассировки с таймингами и т. Д.). Таким образом, приведенный выше код с использованием Tracer будет:

class Program
{
    static void Main(string[] args)
    {
        using (Tracer tracer = new Tracer("TransferMoney", Guid.NewGuid()))
        {
            TransferMoney();
        }            
    }

    static void TransferMoney()
    {
        DebitAccount();
        WireMoney();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...