在微软企业库5中,我正在使用日志记录功能,在使用它时,我遇到了“LogicalOperationStack”traceoption值。当我用Google搜索时,我收到了这个链接:http://msdn.microsoft.com/en-us/library/system.diagnostics.traceeventcache.logicaloperationstack.aspx
但是这个链接中显示的内容对我来说似乎是行话。任何人都可以让我知道这是什么的底线以及我们从中获得了什么数据。请记住我记住我是.net。
的新手由于
答案 0 :(得分:2)
要注意的关键是CorrelationManager
。
从单个逻辑生成的跟踪 操作可以标记为 操作 - 唯一身份,以便 将它们与a的痕迹区分开来 不同的逻辑操作。
逻辑操作也可以嵌套。 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活动ID)和操作的逻辑名称将与消息的其余部分一起记录。
这可以让您通过跟踪活动ID来跟踪所有系统层中的单个请求。您还可以使用逻辑名称来分析日志,以便从逻辑角度查看使用模式和性能。
到企业库。 Enterprise Library会将LogicalOperationStack值添加到日志输出(如果已配置):
LogicalOperationStack = TransferMoney, b63e2f03-5433-40a2-9de5-6232d3aa7f68
以及将每个LogicalOperationStack值添加到类别列表中:
类别:一般,TransferMoney
请注意,TraceOutputOptions
不会输出到EventLog TraceListener。如果你想弄清楚他们为什么不出现,这可能会让你发疯。 :)
Enterprise Library已经有Tracer
类,它提供了与上面代码相同的功能(以及使用计时等记录跟踪消息的功能)。因此,使用Tracer
的上述代码将是:
class Program
{
static void Main(string[] args)
{
using (Tracer tracer = new Tracer("TransferMoney", Guid.NewGuid()))
{
TransferMoney();
}
}
static void TransferMoney()
{
DebitAccount();
WireMoney();
}
}