如何使用 C# Unity 拦截在调用之间登录

How to use C# Unity Interception to log inbetween calls

我目前正在使用Unity Interceptor实现日志记录机制,但我无法正确记录信息。

当我调用 MethodA 时,会记录 MethodA 和 MethodB,但我无法判断 MethodB 日志是由于 MethodA 还是其他一些 MethodB 调用。

我的问题是如何实现某种 Id 以 link 它们一起

预计:

[Id:001]方法A被调用

[Id:001]方法B被调用

[Id:001]方法B完成

[Id:001]方法A完成

当前:

[Id:001]方法A被调用

[Id:002]方法B被调用

[Id:002]方法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 并将其输出到日志中。如果您不想始终记录 public static void main...

的 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}" );
}