2010-11-22 12 views
0

Ich schreibe aus einer ASP.NET-Webanwendung in das Anwendungsereignisprotokoll. Wie kann ich das Feld "Benutzer" des Protokolleintrags ausfüllen?ASP.NET-Ereignisprotokoll: Feld "Benutzer" ausfüllen?

+0

dieses Duplikat gefunden: http://stackoverflow.com/questions/147307/net-how-to-set-user-information-in-an-eventlog-entry –

Antwort

1

Der Benutzer, der im Ereignisprotokolleintrag aufgezeichnet wird, ist der Benutzer, der den Thread (aus Sicherheitsgründen) zum Zeitpunkt des Ereignisprotokollierungsaufrufs "besitzt". In einer ASP.Net-Anwendung (standardmäßig) ist dies das Konto, unter dem ASP.Net läuft.

Sie können ändern, welcher Benutzer ein Thread unter Verwendung von Windows-Identitätswechsel ausgeführt wird. Ein Beispiel für die Frage auf SO finden Sie unter:

Windows Impersonation from C#

Dies ist ein nicht-trivialer Bereich, und kein Fall von einfach Benutzerdaten an die Ereignisprotokollierung Anruf zu liefern.

+0

Jede Erklärung dafür, warum ich sehen könnte " N/A "im Feld Benutzer aller Einträge, die von meiner ASP.NET-Webanwendung erstellt wurden (ohne Identitätswechsel)? – lance

+1

Der Benutzer wird als "N/V" angezeigt, wenn der Thread unter dem Systemkonto ausgeführt wird. –

+0

Ich verstehe. Als ich den "N/A" -Wert sah, dachte ich, ich könnte einen freien Textwert in dieses Feld schreiben (wenn ich nur wüsste wie). Als ich die Duplikatsfrage gelesen habe, auf die Zhaph uns oben verwiesen hat, sehe ich, dass es ein tatsächlicher Benutzer auf der Box sein muss (was jetzt Sinn macht). – lance

0

Ich griff den Benutzernamen von Asp.net Profil. Dann übergab ich es in die Methode. Hier habe ich es in Global.asax verwendet, aber der gleiche Prinzip sollte anderswo funktionieren.

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

Dies füllt das Feld Benutzer nicht? Fehle ich etwas? – lance

+0

Dadurch wird der Benutzername zum Nachrichtentext hinzugefügt, aber das Feld "Benutzer" ** im Ereignisprotokoll wird nicht ausgefüllt. –

+0

@lance - Nein, du verpasst nichts, ich habe die Frage missverstanden. Obwohl ich jetzt die Methode anschaue, scheint es keinen Weg zu geben, den Benutzernamen als Parameter zu übergeben. – MAW74656

Verwandte Themen