C# 我应该如何写入事件日志

C# 我应该如何写入事件日志,c#,event-log,C#,Event Log,可能我只是误解了System.Diagnostics.EventLog,但我无法以我的应用程序名写入EventLog。该项目是ASP.NET web服务(.NET Framework 4),在网络服务用户下工作 我试过这个,它很有效(如上所述): 但应用程序不是我的应用程序的名称。因此,我尝试更改eventLog.Source=“Application”进入eventLog.Source=System.Diagnostics.Process.GetCurrentProcess().Process

可能我只是误解了
System.Diagnostics.EventLog
,但我无法以我的应用程序名写入EventLog。该项目是ASP.NET web服务(.NET Framework 4),在网络服务用户下工作

我试过这个,它很有效(如上所述):

但应用程序不是我的应用程序的名称。因此,我尝试更改
eventLog.Source=“Application”
进入
eventLog.Source=System.Diagnostics.Process.GetCurrentProcess().ProcessName。结果是找不到异常源,但某些。。。作为。ProcessName是w3wp,对我来说可以,但我不能写日志。所以我尝试用logName参数重载构造函数,但没有成功

如果我理解得很好,
WriteLog
方法在某些情况下需要访问注册表(答案)?好的,这需要更多的dll更新。最好的建议是在安装过程中修改注册表。但是,我的更改是“仅”在分布式dll中更新,而不是新安装

MSDB的意思是,我找到了一些关于
EventLogPermissionAttribute
()和
EventLogPermission
()的信息,但它对我一点帮助都没有。我试着使用它,但总是得到同样的例外。没有例子

最后我发现这个():

但它以类似的例外结束。现在,它说了一点细节:它无法访问“安全”协议

所以,问题是:我应该如何写入事件日志?或者确实需要更新注册表(我可以通过我们的更新工具进行更新,但我不相信我想这样做)


我还想了解
System.Diagnostics.EventLog
是如何工作的,以及它在后台做了什么,以便更好地理解我的代码(如果它对我有用)。

您需要管理员访问权限才能创建自定义事件日志源,而
网络服务
没有该访问权限。您需要更新安装程序以创建该日志源,然后安装程序必须以管理员身份运行。

这证实了我的研究。最后,我选择了一种不同的方法。将日志写入我有权访问的文件更容易。谢谢
using (System.Diagnostics.EventLog eventLog = new System.Diagnostics.EventLog())
{
    eventLog.Source = "Application";
    eventLog.WriteEntry("MY LOG INFO", System.Diagnostics.EventLogEntryType.Information);
}
EventLogPermission eventLogPermission = new EventLogPermission(EventLogPermissionAccess.Administer, ".");
eventLogPermission.PermitOnly();
if (!EventLog.SourceExists(source))
{
    EventLog.CreateEventSource(source, "Application");
}
EventLog.WriteEntry(source, message, entryType);