2010-11-22 42 views

Répondre

1

L'utilisateur enregistré dans l'entrée du journal des événements est l'utilisateur qui "possède" le thread (du point de vue de la sécurité) au moment où l'appel de journalisation des événements a été effectué. Dans une application ASP.Net (par défaut), il s'agit du compte sous lequel ASP.Net s'exécute.

Vous pouvez changer l'utilisateur sous lequel un thread s'exécute en utilisant l'emprunt d'identité Windows. Pour une question d'exemple sur le SO, voir:

Windows Impersonation from C#

C'est une zone non-trivial, et non un cas de la simple fourniture de données d'utilisateur à l'appel de la journalisation des événements.

+0

Toute explication pourquoi je pourrais voir " N/A "dans le champ Utilisateur de toutes les entrées créées par ma webapp ASP.NET (n'utilisant pas l'emprunt d'identité)? – lance

+1

L'utilisateur est affiché comme "N/A" lorsque le thread est identifié comme étant en cours d'exécution sous le compte système. –

+0

Je vois. Voir la valeur "N/A" m'a fait penser que je pouvais mettre une valeur de texte libre dans ce champ (si seulement je savais comment). En lisant la question en double à laquelle Zhaph nous a référé ci-dessus, je vois que ce doit être un utilisateur réel sur la boîte (ce qui est logique, maintenant). – lance

0

J'ai attrapé le nom d'utilisateur du profil Asp.net. Ensuite, je l'ai passé dans la méthode. Ici, je l'ai utilisé dans Global.asax, mais le même principe devrait fonctionner ailleurs.

String username = User.Identity.Name; 
      String pageRequested = ((HttpApplication)sender).Request.Path; 

      error = Server.GetLastError().GetBaseException(); 

      String message = "ERROR MESSAGE: " + error.Message + 
           "\nINNER EXCEPTION: " + error.InnerException + 
           "\nSOURCE: " + error.Source + 
           "\nFORM: " + Request.Form.ToString() + 
           "\nQUERYSTRING: " + Request.QueryString.ToString() + 
           "\nTARGETSITE: " + error.TargetSite + 
           "\nSTACKTRACE: " + error.StackTrace + 
           "\nNCLWEB USERNAME: " + username + 
           "\nDATESTAMP: " + DateTime.Now; 

      System.Diagnostics.EventLog.WriteEntry("NCLWeb", message, System.Diagnostics.EventLogEntryType.Error); 
+1

Cela ne remplit pas le champ Utilisateur? Est-ce que je manque quelque chose? – lance

+0

Cela ajoutera le nom d'utilisateur dans le texte du message, mais il ne remplira pas le champ "Utilisateur" ** ** dans le journal des événements. –

+0

@lance - Non, vous ne manquez rien, j'ai mal compris la question. Bien que, maintenant que je regarde la méthode, il ne semble pas y avoir un moyen de passer le nom d'utilisateur comme un paramètre. – MAW74656