À l'aide de points de vue avec les ILoggerFactory
Je suis en train de consigner les exceptions à l'Application des Connaissances. J'ai réussi en faisant cela, en appelant TelemetryClient.TrackException
directement. Cependant, je voudrais faire abstraction de cela dans mon code au cas où je voudrais connecter à d'autres plates-formes dans le futur, je voudrais donc en tenir à seulement le ILogger interface.
J'ai trouvé que vous pouvez utiliser ILoggerFactory.AddApplicationInsights
(tel que mis en œuvre ici), mais peu importe ce que j'ai fait, je ne vois pas les journaux montrant dans ApplicationInsights avec cette.
Ci-dessous mon 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 ... )
}
Alors, j'essaie de l'utiliser dans mon contrôleur comme ceci:
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" );
}
Cependant, je ne vois pas les exceptions associées à la demande. Si je remplace l' Logger.LogError
ligne avec TelemetryClient.TrackException
(et de créer de la TelemetryClient
premier), ensuite, je peux voir l'exception sans aucun problème.
Je ne sais pas ce que je fais mal. Quelqu'un pourrait-il aider?
Vous devez vous connecter pour publier un commentaire.
Selon votre description, je suggère que vous pourriez essayer ci-dessous les codes à activer ILogger journal de l'erreur à la ApplicationInsights.
Vous pourriez utiliser directement loggerFactory.AddApplicationInsights() la méthode pour activer le ApplicationInsights ILogger.
Plus de détails, vous pouvez consulter ci-dessous les codes:
Le démarrage de la classe:
Appsettings.json:
Résultat:
Mise à jour:
Le record de trouver dans la fonctionnalité de recherche.
J'ai finalement compris. Il ya deux façons de résoudre mon problème:
Façon très simple:
J'ai été en utilisant les anciennes versions de l'Application Insights NuGets. Plus précisément,
Microsoft.ApplicationInsights.2.2.0
etMicrosoft.ApplicationInsights.AspNetCore.2.0.0
.Une fois que j'ai mise à niveau de
Microsoft.ApplicationInsights.2.4.0
etMicrosoft.ApplicationInsights.AspNetCore.2.1.1
, tout fonctionne comme prévu. Vous voyez aussi laLogXXX
avec une exception comme un argument en montrant que l'Exception, et sans exception apparaît comme la Trace comme prévu.Un peu plus difficile:
Pour une raison quelconque, le
IApplicationBuilder
etIServiceProvider
dansConfigure
ne pas fournir le bon fournisseur de services à utiliser dansAddApplicationInsights
, de sorte que vous devez ajouter le fournisseur dans le ConfigureServices:Cela signifie que vous avez besoin pour économiser de l'
loggerFactory
à partir du constructeur dans une propriété/domaine, car il n'est pas disponible via l'injection de dépendance dansConfigureServices
.Ce que j'ai fait (sans doute la meilleure solution pour l'instant à mon avis):
Même si ce n'est que l'une des solutions ci-dessus ne résout le problème, j'ai décidé de faire les deux. C'est parce que je veux être en mesure de se connecter erreur dans
ConfigureServices
ainsi. - Je mettreloggerFactory.UseApplicationInsights
dansConfigure
, je ne voudrais pas être en mesure de voir l'erreur dansConfigureServices
sur ApplicationInsights. Je préfère aussi voir des Traces et des Exceptions, une fonctionnalité qui vient seulement avec la nouvelle version du package.Malheureusement, le SDK a été mis à jour à feu Exception de Télémétrie que récemment (voir s'engager), et le changement n'était pas encore publié.
Les seules routes, je vois tout maintenant est de laisser l'appel explicite à
TelemetryClient.TrackException
dans votre code, ou de l'envelopper le tout avec votre propre mise en œuvre deILogger
- à la fois comme des solutions temporaires jusqu'à ce que le SDK officiel l'appui de cetteIl y a maintenant un soutien de première catégorie pour la journalisation de l'Application Insights, à l'aide de la Microsoft.Extensions.La journalisation.ApplicationInsights fournisseur.