Arbeitete es aus, die von zwei Optionen:
1) ILoggerProvider Implementieren Sie Ihre eigene ILoggerProvider und ILogger aus dem Namensraum Microsoft.Framework.Logging es dann in Startup.cs fügen folgenden Code in das MVC-Framework anhängen:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory)
{
loggerfactory.AddProvider(new YourCustomProvider());
}
Aber die oben genannte Option scheint die Write-Funktion des ILogger auf MVC bestimmte Ereignisse nur zu nennen, Routing verwendet und so weiter, es wurde nicht genannt, als ich Ausnahmen auf meiner unteren Schicht geworfen, so dass die zweiten Option ausgearbeitet:
2) Globale Filter Ihre eigene Action Implementierung in Startup.cs registrieren:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().Configure<MvcOptions>(options =>
{
options.Filters.Add(new YourCustomFilter());
});
}
Es ist wichtig, dass die benutzerdefinierte Filter-Klasse implementiert die IExceptionFilter interace:
public class YourCustomFilter : ActionFilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext context)
{
///logic...
}
}
(EDIT :) Und dann in der Startup-Klasse fügen wir den Filter hinzu:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.Filters.Add(new YourCustomFilter());
});
}
Suchen Sie nach völlig willkürlichen Ausnahmen? Oder Ausnahmen, die dazu führen, dass die Anforderung fehlschlägt? Wenn es versucht wird, * alle * Ausnahmen zu erfassen, ist das nicht realistisch möglich, da die meisten Ausnahmen von Teilen des Systems abgefangen und gehandhabt werden (und dann einem Logger zugeführt werden). Wenn Sie feststellen, dass einige Ausnahmen nicht protokolliert werden, melden Sie einen Fehler im entsprechenden Repository unter https://github.com/aspnet/ (z. B. MVC oder XRE). – Eilon
Ja, das war der Grund, warum es nicht funktioniert hat, weil ich sie in den unteren Schichten gefangen habe, aber als ich den Fang vorübergehend kommentiert habe, erlaubte mir nur der Filteransatz, die geworfene Ausnahme zu erwischen ILogger, ist das normales Verhalten? Wenn nicht, kann ich es noch einmal versuchen (wie ich derzeit den Global Filter-Ansatz implementiert habe), und wenn das der Fall ist, kann ich darüber auf GitHub schreiben. –
Ja, wenn Sie die Ausnahme fangen, wird niemand sonst es sehen, also gibt es nichts zu loggen. Aber Sie könnten sehr gut Recht haben, dass es eine andere Komponente gibt, wie Fehlerbehandlung Middleware, die die Ausnahme nicht protokolliert. Könnte für das https://github.com/aspnet/Diagnostics Repo geeignet sein. – Eilon