2009-01-31 9 views
4

Par défaut, ASP.NET enregistre toutes les exceptions non interceptées dans le journal des événements système. Je suis conscient du fait que l'on devrait avoir une installation forestière appropriée, mais c'est mieux que rien et cela sert bien de solution temporaire. Je voudrais pouvoir filtrer efficacement les événements dans le journal.Valeur personnalisée pour la propriété source du journal des événements pour les erreurs ASP.NET

J'ai appris que, lors de la connexion par programmation, vous pouvez définir une valeur personnalisée pour la colonne Source dans le journal des événements via:

EventLog eventLog = new EventLog("Application"); 
eventLog.Source = "My custom name"; 
eventLog.WriteEntry("Some error description ...", EventLogEntryType.Error); 

Cependant, ASP.NET définit cette valeur à « ASP.NET » suivi de sa version. J'ai brièvement vérifié la documentation de web.config, mais je n'ai pas trouvé d'endroit évident pour la changer. Je me demande si cela peut être changé du tout.

Répondre

2

Votre meilleur pari est d'utiliser la propriété source comme prévu, mais utiliser une classe d'installation dans votre installateur pour configurer le registre lors de l'installation (sous Admin), par exemple .:

 
using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Configuration.Install; 
using System.Diagnostics; 

namespace InstallerClasses 
{ 
    [RunInstaller(true)] 
    public partial class EventLog : Installer 
    { 
     private EventLogInstaller eventLogInstaller; 

     /// 
     /// Creates the event log for MyApp 
     /// 
     public EventLog() 
     { 
      InitializeComponent(); 

      // Create an instance of an EventLogInstaller. 
      eventLogInstaller = new EventLogInstaller(); 

      // Set the source name of the event log. 
      eventLogInstaller.Source = "MySource"; 

      // Set the event log that the source writes entries to. 
      eventLogInstaller.Log = "Application"; 

      // Add myEventLogInstaller to the Installer collection. 
      Installers.Add(eventLogInstaller); 
     } 
    } 
} 

Et assurez-vous il est exécuté en tant qu'action personnalisée dans votre programme d'installation.

+0

Merci. Cela confirme ma conclusion que la propriété source n'est pas destinée à être utilisée comme une chaîne ad-hoc. –

0

Vous pouvez gérer les exceptions non rattrapées dans votre global.asax, puis connectez-vous l'exception comme programme si:

void Application_Error(object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError().GetBaseException(); 
    // logging code here 
} 
+0

Merci. Je sais que c'est mieux de le faire en général, mais je cherchais un simple commutateur de configuration. –

1

Il semble que l'utilisation de la propriété source n'est pas une bonne idée. À l'origine, je pensais que c'était un texte libre. Mais je viens de découvrir que c'est quelque chose qui doit être enregistré via la fonction API Win32 RegisterEventSource (...), et cela ne semble fonctionner que lorsque l'application s'exécute sous les privilèges d'administration. .NET crée silencieusement une nouvelle source pour vous, mais si vous n'êtes pas un administrateur, il génère une exception. Donc, dans l'ensemble, l'utilisation d'un nom de source ad hoc à l'intérieur d'un ASP.NET peut nécessiter une pré-inscription qui introduirait une autre étape dans le déploiement.