如何使用 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}" );
}
我目前正在使用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
...
如果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}" );
}