recently habe ich Serilog (strukturierte Protokollierung für .net) entdeckt und viele seiner Vorteile gesehen. aber ich habe einige Probleme damit. ich habe 4 Projekte, eins ist Web, eins ist Infrastruktur und die anderen beiden sind Windows-Dienste, ich möchte Serilog-Konfiguration einmal erklären und es mehrmals verwenden. und ich möchte es auch mit Abhängigkeitsinjektion verwenden. Ich habe jetzt Web für drei Tage gesucht, aber ich habe nichts nützliches gefunden, bitte helfen mir einige.Wie verwende ich Serilog mit Unity?
zum Beispiel möchte ich diese Klasse meine Protokollierungsklasse sein.
public interface IMyLogger
{
void Information(string message, object[] parameters);
}
public class MyLogger : IMyLogger
{
public MyLogger()
{
}
public void Information(string message, object[] parameters)
{
Log.Information("LogType : {LogType} - Operation : {Operation}", parameters);
}
}
public class UserClass
{
private readonly IMyLogger _myLogger;
public UserClass(IMyLogger myLogger)
{
_myLogger = myLogger;
}
}
jetzt weiß ich nicht, wo ich diese Codezeile setzen sollte:
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.CreateLogger();
tnx im Voraus.
Das funktioniert gut. Mir ist aufgefallen, dass der Standard Lifetime Manager, wenn keiner in Unity 4.0.1 angegeben ist, der transiente Lifetime Manager ist. Dies bedeutet, dass jeder Aufruf zum Auflösen des ILoggers die Injektionsfabrik ausführt und eine neue Instanz zurückgibt. Ich glaube, der Logger sollte stattdessen ContainerControllerLifetimeManager verwenden? – dotnetguy
@dotnetguy Besser spät als nie, ich aktualisiere dies jetzt. :) –
Für alle anderen: ContainerControllerLifetimeManager macht die beste Arbeit, das Singleton-Verhalten nachzuahmen, für das Serilog gedacht war. Andere Lebenszeitmanager arbeiten zwar, aber dies ist möglicherweise etwas effizienter als das Erstellen einer neuen Serilog-Instanz für jede Anforderung. –