如何使用C#Unity拦截记录中间调用
我目前正在使用Unity Interceptor实现日志记录机制,但无法正确记录信息 当我调用MethodA时,MethodA和MethodB都会被记录,但我无法判断MethodB日志是由于MethodA还是其他MethodB调用引起的 我的问题是如何实现某种Id将它们链接在一起 预期: [Id:001]方法A被调用 [Id:001]方法B被调用 [Id:001]方法B已完成如何使用C#Unity拦截记录中间调用,c#,unity-container,unity-interception,C#,Unity Container,Unity Interception,我目前正在使用Unity Interceptor实现日志记录机制,但无法正确记录信息 当我调用MethodA时,MethodA和MethodB都会被记录,但我无法判断MethodB日志是由于MethodA还是其他MethodB调用引起的 我的问题是如何实现某种Id将它们链接在一起 预期: [Id:001]方法A被调用 [Id:001]方法B被调用 [Id:001]方法B已完成 public class A() { [Log] public void MethodA() {
public class A() {
[Log]
public void MethodA() {
var b = new B();
b.MethodB();
}
}
public class B() {
[Log]
public void MethodB () {
// some action B
}
}
[Id:001]方法A已完成
public class A() {
[Log]
public void MethodA() {
var b = new B();
b.MethodB();
}
}
public class B() {
[Log]
public void MethodB () {
// some action B
}
}
当前:
[Id:001]方法A被调用
[Id:002]方法B被调用
[Id:002]方法B已完成
public class A() {
[Log]
public void MethodA() {
var b = new B();
b.MethodB();
}
}
public class B() {
[Log]
public void MethodB () {
// some action B
}
}
[Id:001]方法A已完成
public class A() {
[Log]
public void MethodA() {
var b = new B();
b.MethodB();
}
}
public class B() {
[Log]
public void MethodB () {
// some action B
}
}
您可以使用
CallContext
存储一些id并将其输出到日志中。如果您不想总是记录publicstaticvoidmain
的id,那么主要的问题是识别调用的根
如果MethodA
始终为root,则其工作原理如下:
public class A() {
[Log]
public void MethodA() {
CallContext.SetLogicalData( "log-id", Guid.New().ToString() )
var b = new B();
b.MethodB();
}
}
public class B() {
[Log]
public void MethodB () {
// some action B
}
}
//...
public void Log( string message )
{
_backEnd.Write( $"[Id: {CallContext.GetLogicalData( "log-id" )}] {message}" );
}
你好,Haukinger,在我的例子中,使用callcontext可能并不理想,因为我不希望在函数调用中使用任何日志逻辑(如设置callcontext),我希望ICallHandler是自包含的。那么,您希望如何识别应该触发新id的函数?MethodA如何知道它必须设置一个新id(虽然它是从MethodC调用的),但MethodB不应该(因为它是由MethodA调用的)?我可以向属性添加一些属性,让调用处理程序知道何时创建新id,但问题仍然存在。如果从方法内部设置调用上下文,它是否有效?