Как использовать C # Unity Interception для входа между вызовами - PullRequest
0 голосов
/ 27 апреля 2018

В настоящее время я использую Unity Interceptor для реализации механизма ведения журнала, но не могу правильно записать информацию.

Когда я вызываю MethodA, MethodA и MethodB регистрируются, но я не могу сказать, происходит ли журнал MethodB из-за MethodA или какого-то другого вызова MethodB.

У меня вопрос, как я могу реализовать какой-то Id, чтобы связать их вместе

ожидается:

[Id: 001] Метод A называется

[Id: 001] Метод B называется

[Id: 001] Метод B завершен

[Id: 001] Метод А завершен

ток:

[Id: 001] Метод A называется

[Id: 002] Метод B называется

[Id: 002] Метод B завершен

[Id: 001] Метод А завершен

public class A() {
    [Log]
    public void MethodA() {
        var b = new B();
        b.MethodB();
    }
}

public class B() {
    [Log]
    public void MethodB () {
         // some action B
    }
}

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете использовать CallContext для сохранения некоторого идентификатора и вывода его в журналах. Основная проблема будет заключаться в определении корня вызова, если вы не хотите всегда регистрировать идентификатор 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}" );
}
...