Wie verwende ich Microsoft.Extensions.Logging aus dem Bibliothekscode?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Wie verwende ich Microsoft.Extensions.Logging aus dem Bibliothekscode?

Post by Anonymous »

Es fällt mir schwer zu verstehen, wie man Microsoft.Extensions.Logging in einer allgemeinen Bibliothek am besten verwendet.
Mit NLog können Sie Folgendes tun:

Code: Select all

public class MyClass
{
private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();

public void foo()
{
Logger.Info("foo");
}
}
Und fertig! Sie lassen den Client sein Ziel konfigurieren, aber das ist nicht mehr Ihr Problem.
Aber mit Microsoft.Extensions.Logging sieht der Code eher so aus:

Code: Select all

public class MyClass
{
private readonly Ilogger Logger;

public MyClass(ILogger logger)
{
Logger = logger;
}

public void foo()
{
Logger.LogInformation("foo");
}
}
Jetzt muss ich also einen ILogger beim Ctor übergeben.

OK, kein Problem, ich kann einen von einer ILoggerFactory bekommen.

Jetzt brauche ich eine ILoggerFactory.
  • Wo bekomme ich eine ILoggerFactory? Ich erstelle einfach eine globale für meine Bibliothek?
  • Wie konfiguriert der Client die Factory, um den von ihm gewünschten ILoggerProvider hinzuzufügen?
  • Wird die ILoggerFactory automatisch mit den richtigen Anbietern konfiguriert, wenn der Client ihre Konfiguration korrekt durchgeführt hat?
Das klingt falsch, da Sie zum Erstellen einer LoggerFactory im Bibliothekscode einen Verweis auf Microsoft.Extensions.Logging benötigen, während Sie nur referenzieren sollten Microsoft.Extensions.Logging.Abstractions. Das ist ein Hinweis auf einen Codegeruch.
Die Abhängigkeitsinjektion im Konstruktor sieht gut aus, wenn Sie sich in einer ASP.Net Core-App oder einem Dienst befinden, aber eine allgemeine Bibliothek wünschen, die in einer Konsolen-App oder einer WinForm/WPF-Anwendung verwendet werden könnte?
  • Was passiert, wenn die Clientbibliothek keinen generischen Host hat oder keine Abhängigkeitsinjektion verwendet?
Muss der Client jetzt also einen ILogger übergeben?

Code: Select all

//Client code
var myClass = new MyClass(); //with NLog

var myClass = new MyClass(loggerFactory.CreateLogger());
Zuerst ist der Code schrecklich und jetzt muss der Client irgendwo eine ILoggerFactory nachverfolgen.
Verpasse ich etwas oder sieht Microsoft.Extensions.Logging für die allgemeine Bibliothek schrecklich aus? Haben Sie ein Codebeispiel für ein Projekt dieser Art mit Microsoft.Extensions.Logging?
Vielen Dank

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post