J'ai créé un nouveau récepteur personnalisé Serilog et j'essaie de le configurer via appSettings.Utilisation de appSettings pour configurer un récepteur Serilog personnalisé
Le récepteur personnalisé s'appelle 'DiagnosticsBroadcaster'. Son extension LoggerSinkConfiguration est:
public static LoggerConfiguration DiagnosticsBroadcaster(
this LoggerSinkConfiguration loggerConfiguration,
string defaultLoggerName = "serilog",
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
IFormatProvider formatProvider = null)
{
if (loggerConfiguration == null)
{
throw new ArgumentNullException("loggerConfiguration");
}
if (defaultLoggerName == null)
{
throw new ArgumentNullException("defaultLoggerName");
}
return loggerConfiguration.Sink(new DiagnosticsBroadcaster(defaultLoggerName, formatProvider), restrictedToMinimumLevel);
}
La classe évier DiagnosticsBroadcast est:
public class DiagnosticsBroadcaster : ILogEventSink, IDisposable
{
private OMMHttpClient _clientApp = null;
private readonly string _defaultLoggerName = string.Empty;
private readonly IFormatProvider _formatProvider = null;
private readonly object _syncRoot = new object();
private bool _isDisposed = false;
//----------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------
public DiagnosticsBroadcaster(string defaultLoggerName, IFormatProvider formatProvider = null)
{
if (string.IsNullOrEmpty(defaultLoggerName))
{
throw new ArgumentException("defaultLoggerName");
}
_defaultLoggerName = defaultLoggerName;
_formatProvider = formatProvider;
string ommDispatcherUrl = ConfigurationManager.AppSettings["OMMDispatcherUrl"];
_clientApp = new OMMHttpClient(ommDispatcherUrl, "api/omm/diag/app");
}
//----------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------
public void Emit(Serilog.Events.LogEvent logEvent)
{
var loggerName = _defaultLoggerName;
string message;
lock (_syncRoot)
{
if (_isDisposed)
{
throw new ObjectDisposedException("The OMMJHttpClient has been disposed.");
}
if (logEvent.Exception != null)
{
message = string.Format("{0} -- EXCEPTION: {1}", logEvent.RenderMessage(_formatProvider), logEvent.Exception.Message);
}
else
{
message = logEvent.RenderMessage(_formatProvider);
}
Task.Factory.StartNew(async() =>
{
try
{
HttpResponseMessage response = await _clientApp.Post<string>(message);
if (!response.IsSuccessStatusCode)
{
Log.Warning("Error sending diagnostic message [APP] - {0} - {1}", response.StatusCode, response.ReasonPhrase);
}
}
catch (Exception ex)
{
Log.Warning("Error sending diagnostic message [APP] - {0}", ex.Message);
}
});
}
}
//----------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------
public void Dispose()
{
lock (_syncRoot)
{
if (_clientApp != null)
{
_clientApp.Dispose();
_isDisposed = true;
}
}
}
}
Cet évier personnalisé fonctionne si je configure comme suit:
Log.Logger = new LoggerConfiguration()
.ReadAppSettings()
.WriteTo.DiagnosticsBroadcaster(restrictedToMinimumLevel: LogEventLevel.Information)
.CreateLogger();
Mais ses méthodes ne sont jamais appelés si Je tente de le configurer via appSettings:
<add key="serilog:write-to:DiagnosticsBroadcaster.restrictedToMinimumLevel" value="Information" />
Des suggestions sur la façon dont je peux configurer DiagnosticsBroadcaster via appSettings?
Merci.
clés uniques parmi les paramètres d'application qui était la question que j'ajouté une clé "serilog: using" avec le nom de l'assembly contenant le puits DiagnosticsBroadcaster et cela fonctionne maintenant. Merci! – programmerj
Im 'getting ## Section de configuration non reconnue ajouter ## quand je mets mon fichier d'assemblage pour un récepteur personnalisé ... que puis-je vérifier? – advapi
@advapi sonne comme si vous deviez l'imbriquer sous '' –