ASP.NET 事件日志:填充“用户”场地?

发布于 2024-10-03 14:56:43 字数 55 浏览 5 评论 0原文

我正在从 ASP.NET Web 应用程序写入应用程序事件日志。如何填充日志条目的“用户”字段?

I'm writing to the Application event log from an ASP.NET webapp. How can I populate the "User" field of the log entry?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

如痴如狂 2024-10-10 14:56:43

事件日志条目中记录的用户是在进行事件日志记录调用时“拥有”该线程(从安全角度来看)的用户。在 ASP.Net 应用程序中(默认情况下),这将是 ASP.Net 运行所用的帐户。

您可以使用 Windows 模拟更改线程在哪个用户下运行。有关 SO 的示例问题,请参阅:

C# 的 Windows 模拟

这是一个不平凡的领域,而不是简单地向事件记录调用提供用户详细信息的情况。

The user that is recorded in the event log entry is the user that "owns" the thread (from a security perspective) at the time the event logging call was made. In an ASP.Net application (by default) this will be the account that ASP.Net is running under.

You can change which user a thread is running under using windows impersonation. For an example question on SO, see:

Windows Impersonation from C#

This is a non-trivial area, and not a case of simply supplying user details to the event logging call.

贱贱哒 2024-10-10 14:56:43

我从 Asp.net 配置文件中获取了用户名。然后我将它传递到方法中。在这里,我在 Global.asax 中使用了它,但相同的原理应该在其他地方工作。

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);

I grabbed the Username from Asp.net profile. Then I passed it into the method. Here I've used it in Global.asax, but the same principal should work elsewhere.

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文