#.net #enterprise-library
#.net #корпоративная библиотека
Вопрос:
В корпоративной библиотеке Microsoft 5 я использую функцию ведения журнала, при использовании которой я наткнулся на значение трассировки «LogicalOperationStack». Когда я поискал это в Google, я получил эту ссылку: http://msdn.microsoft.com/en-us/library/system.diagnostics.traceeventcache.logicaloperationstack.aspx
Но содержимое, представленное по этой ссылке, кажется мне жаргоном. Может ли кто-нибудь сообщить мне суть того, что это такое и какие данные мы получаем из этого. Пожалуйста, объясните мне, имея в виду, что я новичок в .net.
Спасибо
Ответ №1:
Ключевым моментом, на который следует обратить внимание, является 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 (ОН ЖЕ идентификатор действия) и логическое имя операции будут регистрироваться вместе с остальной частью сообщения.
Это может позволить вам отслеживать один запрос на всех уровнях вашей системы, отслеживая идентификатор действия. Вы также можете использовать логическое имя для анализа своих журналов, чтобы увидеть шаблоны использования и производительность с логической точки зрения.
Переход к корпоративной библиотеке. Корпоративная библиотека добавит значения LogicalOperationStack в выходные данные журнала (если они настроены):
LogicalOperationStack=TransferMoney, b63e2f03-5433-40a2-9de5-6232d3aa7f68
а также добавление каждого значения LogicalOperationStack в список категорий:
Категория: Общие, 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();
}
}