0

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

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

我的问题是如何实现某种 Id 将它们链接在一起

预期的:

[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
    }
}
4

1 回答 1

0

您可以使用CallContext来存储一些 id 并将其输出到日志中。主要问题将是识别呼叫的根,如果您不想总是记录public static void main...

如果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}" );
}
于 2018-04-27T09:11:17.763 回答