Serilog Loglevel Überschreiung zwischen abstrakter Klasse und möglicher implementierender KlasseC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Serilog Loglevel Überschreiung zwischen abstrakter Klasse und möglicher implementierender Klasse

Post by Anonymous »

Ich verwende Serilog, um sich über eine benutzerdefinierte Sink in meiner C# -Anwendung auf einem SEQ -Server zu melden. Viele Funktionen, einschließlich RPC -Server -Implementierungen, werden aus einer Unternehmensbibliothek abgeleitet. Eine abstrakte Klasse, ARPCServer und eine implementierende Klasse, RPCNCCreator . Wenn log.informationsmeldungen innerhalb von ARPCServer emittiert werden, zeigt die SourceContext -Mobilie von Serilog die Implementierungsklasse fälschlicherweise an.

Code: Select all

RpcNcCreator
) Als Ursprung anstelle von ARPCServer . Wenn ich versuche, Protokolle basierend auf dem RPCNCCreator Namespace zu unterdrücken, verliere ich alle Informationen Level -Protokolle aus dieser Implementierung, was nicht gewünscht wird. SourceContext basierend auf der tatsächlichen Klasse, in der das log.information Aufruf getätigt wird (d. H. ARPCServer im obigen Beispiel), anstatt die konkrete Implementierungsklasse?

Code: Select all

namespace PPS.Kommunikation.Rpc
public class RpcNcCreator : ARpcServer
{
/// 
/// Liefert ein fertig konfiguriertes -Objekt.
/// 
/// Log-Objekt.
/// Options-Objekt.
public RpcNcCreator(ILogger loggerSingleton, IOptions iOptions)
: base(loggerSingleton)
{
Debug.Assert(iOptions != null);
Debug.Assert(iOptions.Value != null);

this.AnfrageExchange = iOptions.Value.AnfrageExchange;
}
//here are methodes that call eg.
private void DocumentStatus()
=> logger.LogInformation("...");
}
< /code>
Bibliothekscode: < /p>
namespace SpeedMaster.Tools.Kommunikation.RPC.Server;
public abstract class ARpcServer : ARpcServer, IDisposable
{

public ARpcServer(ILogger loggerSingleton)
{
_logger = loggerSingleton;
}
//Here in the BaseClass also are logs made eg.
private Task SendeStatusAnfrage(bool nurWennArbeitDaIst)
{
this._logger.LogInformation("Sende Status-Anfrage an alle Clients.");
}
< /code>
AppSettings.json

Code: Select all

//Sample from the
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.Seq", "SpeedMaster.Tools", "PPS" ],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Error",
"Microsoft.AspNetCore": "Warning",
"System.Net.Http.HttpClient": "Warning",
"SpeedMaster.Tools.Kommunikation.RPC.Server.Internal.ClientStatusChecker": "Warning"
}
},
"WriteTo": [
{
"Name": "Seq",
"Args": {
"restrictedToMinimumLevel": "Information",
"serverUrl": "https://at02-logsammler.speed.intern:45341",
"apiKey": null
}
},
{
"Name": "Console",
"Args": {
"theme": "PPS.Models.SerilogThemes.SpeedMasterThemes::Speedy, PPS",
"outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss} {Level:u3}] ({SourceContext:l}) {Message:lj}{NewLine}{Exception}"
}
}
]
},
< /code>
[img]https://i.sstatic.net/o7p8phA4.png[/img]
[b]Update[/b] for Panagiotis Kanavos
:

Ich verlängere den Code mit dem Konstruktor, was für eine College -Erklärung für mich der Logger von rpcnccreator der Basis . Der RPCNCCreator verwendet einen primären Konstruktor, bei dem es nicht empfohlen wird, ein ' _ ' als Präfix für den Variablennamen zu verwenden.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post