我认为这些概念(活动和逻辑操作)是正交的。你可以有一个里面有很多 LogicalOperations 的 Activity。或者,您可以有一个 Activity 可以更改的 LogicalOperation。我猜想 Activity 比 LogicalOperation 更高级别会更常见。
我这么说可能不是很有帮助,但是就组织日志记录而言,由您决定什么对您和您的应用程序最有意义。
我怀疑一个请求导致一个活动是很常见的。
您可能会发现帮助类有助于更轻松地管理 Activity 和 LogicalOperation。像这样的东西:
class ActivityScope : IDisposable
{
Guid oldActivity;
ActivityScope()
{
oldActivity = System.Diagnostics.CorrelationManager.ActivityId;
System.Diagnostics.CorrelationManager.ActivityId = Guid.NewGuid();
}
public void Dispose()
{
System.Diagnostics.CorrelationManager.ActivityId = oldActivity;
}
}
class LogicalOperationScope : IDisposable
{
public LogicalOperationScope(string logicalOperation)
{
System.Diagnostics.CorrelationManager.StartLogicalOperation(logicalOperation);
}
public void Dispose()
{
System.Diagnostics.CorrelationManager.StopLogicalOperation();
}
}
你可以像这样使用它们:
void ServiceARequest()
{
using (new ActivityScope())
{
//Do some stuff
using (new LogicalOperationScope("SomeWork"))
{
DoSomeWork();
for (int i = 0; i < 10; i++)
{
using (new LogicalOperationScope(string.Format("nested {0}", i))
{
DoNestedWork(i);
}
}
}
}
}
void DoSomeWork()
{
using (new LogicalOperationScope("DoSomeWork"))
{
}
}
void DoNestedWork(int level)
{
}
显然,我的示例重于诊断代码而轻于实际代码,但您明白了。如果拥有 ActivityId 或 LogicalOperation 对您有意义,请尝试使用与此类似的“范围”类来管理它们。
祝你好运!