Mithilfe von Application Insights mit ILoggerFactory
Ich versuche, melden Sie Ausnahmen von der Anwendung der Erkenntnisse. Ich habe es geschafft, dies zu tun, durch aufrufen TelemetryClient.TrackException
direkt. Ich möchte jedoch zu Abstrakt, entfernt von diesem in meinem code, im Falle, ich würde wollen, um log auf andere Plattformen in der Zukunft, also würde ich gerne beibehalten, nur die ILogger-Schnittstelle.
Fand ich, dass Sie verwenden können ILoggerFactory.AddApplicationInsights
(wie implementiert hier) aber egal was ich Tat, ich nicht sehen, die Protokolle, zeigt sich in ApplicationInsights mit diesem.
Unten ist mein code:
Startup.cs
IConfigurationRoot Configuration { get; set; }
ILoggerFactory LoggerFactory { get; set; }
IServiceProvider ServiceProvider { get; set; }
public Startup( IHostingEnvironment hostingEnvironment, ILoggerFactory loggerFactory )
{
this.LoggerFactory = loggerFactory;
string configurationFilePath = "abc.json";
this.Configuration = new ConfigurationBuilder()
.SetBasePath( hostingEnvironment.ContentRootPath )
.AddJsonFile( configurationFilePath, optional: true, reloadOnChange: true )
.AddEnvironmentVariables()
.Build();
}
public void Configure(
IApplicationBuilder applicationBuilder,
IHostingEnvironment hostingEnvironment,
ILoggerFactory loggerFactory,
IServiceProvider serviceProvider )
{
this.ServiceProvider = serviceProvider;
loggerFactory.AddApplicationInsights( serviceProvider );
applicationBuilder.UseMvc();
}
public void ConfigureServices( IServiceCollection services )
{
services.AddApplicationInsightsTelemetry( this.Configuration );
services.AddMvc( .... //A bunch of options here ... )
}
Dann versuche ich, diese in meinem controller wie diesem:
ILogger<XController> Logger { get; set; }
public XController( ILogger<XController> logger )
{
this.Logger = logger;
}
[HttpPost]
[Route( "v3.0/abcd" )]
public async Task PostEvent( [FromBody] XEvent xEvent )
{
this.Logger.LogError( 0, new Exception( "1234" ), "1234" );
}
Aber ich sehe keine Ausnahmen im Zusammenhang mit der Anfrage an alle. Wenn ich ersetzen Sie den Logger.LogError
Linie mit TelemetryClient.TrackException
(und erstellen die TelemetryClient
erste), dann sehe ich die Ausnahme, ohne Probleme.
Ich weiß nicht, was ich falsch mache. Könnte mir jemand helfen?
InformationsquelleAutor KangarooWest | 2017-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach Ihrer Beschreibung, ich schlage vor, Sie könnten versuchen, unter codes aktivieren ILogger sich der Fehler auf der ApplicationInsights.
Könnte man direkt verwenden loggerFactory.AddApplicationInsights() Methode zum aktivieren der ApplicationInsights ILogger.
Mehr details, Sie könnten finden Sie unter codes:
Die startup-Klasse:
Den appsettings.json:
Ergebnis:
Update:
Den Datensatz finden Sie in der such-Funktion.
Ich schlage vor, Sie könnten überprüfen Sie Ihre KI ' s aufnehmen. Soweit ich weiß, ist das Protokoll.Fehler bedeutet hinzufügen von trace-Aufzeichnung in AI, so dass Sie nicht finden, wird der Datensatz in die Fehler, die Sie finden konnte es in der trace-Aufzeichnung. Ich schlage vor, Sie könnten überprüfen Sie nochmals den Datensatz aus der suchen-button(im AI-portal), da meine update-Antwort zeigt.
Dank Brando für die Vorschläge. Ich landete herauszufinden, die Probleme. Meine Vermutung ist, dass unsere codes wurden mit verschiedenen Versionen der NuGet-Pakete, die wurden sehr schnell entwickelnden, also die unterschiedlichen Verhaltensweisen.
Aber die eigentliche Frage ist..... Wie kann Sie aktivieren von Application Insights für core-2.0-console-app mit ilogger :)?
loggerFactory.AddApplicationInsights
InformationsquelleAutor Brando Zhang
Habe ich endlich herausgefunden. Es gibt zwei Möglichkeiten zur Lösung meiner Frage:
Einfach:
Ich war mit älteren Versionen der Anwendung Einblicke NuGets. Insbesondere
Microsoft.ApplicationInsights.2.2.0
undMicrosoft.ApplicationInsights.AspNetCore.2.0.0
.Sobald ich ein upgrade auf
Microsoft.ApplicationInsights.2.4.0
undMicrosoft.ApplicationInsights.AspNetCore.2.1.1
funktioniert alles wie erwartet. Sie sehen auch dieLogXXX
mit einer Ausnahme als argument zeigt sich als Ausnahme, und ohne eine Ausnahme zeigt sich als Spur, als erwartet.Etwas schwieriger Weg:
Aus irgendeinem Grund, das
IApplicationBuilder
undIServiceProvider
imConfigure
nicht die richtigen service-provider zu verwenden, inAddApplicationInsights
, so müssen Sie den provider in der ConfigureServices:Dies bedeutet, dass Sie brauchen, um zu speichern Sie die
loggerFactory
aus dem Konstruktor in eine property/Feld, da es nicht per dependency injection inConfigureServices
., Was ich am Ende tun (wahrscheinlich die beste Lösung für jetzt, in meiner Meinung nach):
Obwohl gerade Sie eine der oben genannten Lösungen das problem beseitigt, habe ich beschlossen, beides zu tun. Das ist, weil ich in der Lage sein möchten, melden Sie Fehler in
ConfigureServices
als gut. Ich legteloggerFactory.UseApplicationInsights
imConfigure
, dann wäre ich nicht in der Lage zu sehen, die Fehler inConfigureServices
auf ApplicationInsights. Ich habe auch lieber sehen beide Spuren und Ausnahmen, eine Funktion, die nur kommt mit dem neuen Paket-version.InformationsquelleAutor KangarooWest
Leider das SDK wurde aktualisiert, um Feuer Ausnahme Telemetrie erst vor kurzem (siehe Begehen), und die änderung wurde noch nicht veröffentlicht.
Den nur Routen, die ich sehe, ist im Moment entweder lassen die expliziten Aufruf
TelemetryClient.TrackException
im code, oder wickeln Sie es alle mit Ihrer eigenen ImplementierungILogger
- sowohl als temporäre Lösungen, bis das offizielle SDK unterstützen diesWas ich meinte ist, dass in der aktuellen SDK Sie nur für TraceTelemetry. Die Fähigkeit, Feuer ExceptionTelemetry verfügbar sein wird in zukünftigen releases des SDK
InformationsquelleAutor EranG