Ich bin spät dran, aber ich habe vor einem Jahr oder so etwas Ähnliches gemacht: Github Repo
Die Idee dieses Setups ist ähnlich wie das, was Sie suchen, aber mit der Fähigkeit, es global zu verbinden, gibt es mehr Code als ich möchte, aber es funktioniert und einmal eingesteckt, funktioniert für das, was Sie suchen.
Wenn Sie einen kurzen Blick auf die ProxyLogger.cs werfen, betrachten Sie diese als Wrapper. Sie kapselt jede Methode, die ihr gegeben wird, und führt sie aus, während sie die Protokollierung des Fehlers, wie hier festgelegt, behandelt. Dies kann dann mit Dependency Injection für alles, was Sie protokollieren möchten, eingerichtet werden, z.B.:
public void ConfigureServices(HostBuilderContext hostBuilder, IServiceCollection services)
{
services.AddOptions();
services.AddSingleton<IHostedService, HostedService>();
services.AddSingleton<IMyClass, MyClass>();
// Logging added for both the hosted service and the example class
services.Decorate<IMyClass, ProxyLogger<IMyClass>>();
services.Decorate<IHostedService, ProxyLogger<IHostedService>>();
}
Sie registrieren Ihre Dienste wie gewohnt, aber darüber hinaus können Sie sie mit dem Proxy-Logger ausstatten, um die Ausführung zu verwalten und die Details vor, nach, bei Fehlern usw. mit FULL params zu protokollieren. Ich war besessen von diesem für eine Weile und dies ist so gut wie ich es bekommen konnte, aber es funktioniert wirklich gut.
0 Stimmen
Vielleicht etwas mit Reflexion in der Sprache, das helfen könnte?
0 Stimmen
Sie können es über Reflexion tun, aber es wird teuer im Laufe der vielen Funktionsaufrufe.
3 Stimmen
Ich glaube nicht, dass Sie dies mit Reflection oder StackTrace/StackFrame tun können. Ich denke, Ihre einzige Wahl kann sein, ein AOP oder Post-Processing-Framework, wie PostSharp zu verwenden.