Laden...

App.config sinnvoll nutzen

Erstellt von FUT320 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.448 Views
F
FUT320 Themenstarter:in
10 Beiträge seit 2018
vor 5 Jahren
App.config sinnvoll nutzen

Hallo,

ich habe eher eine grundsätzliche Frage zur Konfiguration.

Aktuell bzw. in bisherigen Projekten habe ich die App.Config genutzt. Ich habe mehrere Sections in der Config erstellt. Für jede Section habe ich eine extra Klasse geschrieben, in welcher die jeweiligen Values ausgelesen werden und in variablen zwischengespeichert. Diese Variablen habe ich dann meist über Get-Methoden an die anderen Klassen im Konstruktor übergeben z.B.

Log log = new Log(conf.eins,conf.zwei)

Ist das sinnvoll? Gibt es bessere Wege - wahrscheinlich ja...
Ein Kollege liest die Konfiguration z.B. erst aus wenn sie gebraucht wird, bin mir aber nicht sicher, ob das tatsächlich Vorteile hat.

Ich wäre für Verbesserungsvorschläge dankbar.

16.807 Beiträge seit 2008
vor 5 Jahren

Natürlich macht es Sinn, prinzipiell die App.Config zu nutzen - das Framework nimmt hier einem eine Menge ab.

Generell ist in .NET der modernste Ansatz derzeit https://www.nuget.org/packages/Microsoft.Extensions.Configuration/, der mit .NET Core in .NET Welt kam und auch unter .NET Framework funktioniert.
Konfiguration in ASP.NET Core - wie gesagt: funktioniert auch in anderen Technologien in .NET.
ASP.NET Core ist prinzipiell nichts anderes als eine Konsolenapplikation mit eigener Engine.

Jedoch gibt es - gerade beim Logging - modernere Ansätze; Serilog.
Serilog ist ein Full Structured Logging Framework und lebt i.d.R. entweder aus einer Code-Konfiguration oder aus einer serilog.json (die der empfohlene Weg darstellt).
Und Serilog orientiert sich dabei eben u.a. an Prinzip des Microsoft.Extensions.Configuration Frameworks.

3.003 Beiträge seit 2006
vor 5 Jahren

Wo das Thema grad auf dem Tisch ist: verstehe ich Serilog falsch, oder wollen die wirklich, dass ich die statische Log-Klasse zum loggen benutze, statt mir einen ILogger zu injecten? Oder ist das nur, wenn man die deconstruction haben möchte (zB gemeinsam mit seq), und man kann ansonsten ganz beruhigt den gewohnten ILoggerFactory/ILogger-Weg gehen?

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

1.029 Beiträge seit 2010
vor 5 Jahren

Naja - deren GitHub-Seite nach ist das zur vereinfachten Nutzung - kann - es wird weder empfohlen noch abgeraten.

Configuring and using the Log class is an optional convenience that makes it easier for libraries to adopt Serilog. Serilog does not require any static/process-wide state within the logging pipeline itself, so using ILogger directly is fine.

3.003 Beiträge seit 2006
vor 5 Jahren

Naja - deren GitHub-Seite nach ist das zur vereinfachten Nutzung - kann - es wird weder empfohlen noch abgeraten.

Nunja, da ILogger aber das Templatelogging nicht unterstützt, verstehe ich das so, dass man, wenn man das benutzen will, eben Log benutzen muss. Genau das vermute ich aber nur und wollte ich durch die Frage verifizieren 😃.

Ich meine das hier mit Templatelogging:

// Don't:  
Log.Information("The time is " + DateTime.Now);  
Instead, always use template properties to include variables in messages:  
  
// Do:  
Log.Information("The time is {Now}", DateTime.Now);  
  

Wenn es so ist, wie ich denke, würde ich vorerst auf dieses feature verzichten, da die Migration zu Serilog sonst zu aufwändig wäre.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

1.029 Beiträge seit 2010
vor 5 Jahren

Hi,

hier schreibt SeriLog eigentlich was andres als du denkst:

Log events are written to sinks using the Log static class, or the methods on an ILogger. These examples will use Log for syntactic brevity, but the same methods shown below are available also on the interface.

Siehe: https://github.com/serilog/serilog/wiki/Writing-Log-Events

--> Sehe jedenfalls nicht, dass SeriLog über ILogger kein TemplateLogging unterstützen würde... Folgendes funktioniert z.B. super:


using System;
using Microsoft.Extensions.Logging;
using Serilog;
using ILogger = Microsoft.Extensions.Logging.ILogger;

namespace ConsoleApp6
{
    class Program
    {
        static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                .WriteTo.Console()
                .CreateLogger();

            var loggerFactory = new LoggerFactory();
            loggerFactory.AddSerilog();

            new LogTest(loggerFactory).Log();
            Console.ReadLine();
        }
    }

    public class LogTest
    {
        private readonly ILogger _log;

        public LogTest(ILoggerFactory loggerFactory)
        {
            _log = loggerFactory.CreateLogger(typeof(LogTest));
        }

        public void Log()
        {
            _log.LogInformation("The time is {Now}", DateTime.Now);
        }
    }
}


3.003 Beiträge seit 2006
vor 5 Jahren

Moah danke! Tomate, Augen. Danke!

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)