我应该如何写入 EventLog
How should I write to EventLog
可能我只是误解了System.Diagnostics.EventLog
,但我无法以我的应用程序名称写入事件日志。项目是 ASP.NET 网络服务 (.NET Framework 4),在 NETWORK SERVICE 用户下工作。
我试过了并且有效(如here所述):
using (System.Diagnostics.EventLog eventLog = new System.Diagnostics.EventLog())
{
eventLog.Source = "Application";
eventLog.WriteEntry("MY LOG INFO", System.Diagnostics.EventLogEntryType.Information);
}
但 Application 不是我的应用程序的名称。所以我试着把eventLog.Source = "Application";
改成了eventLog.Source = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
。结果异常 未找到源,但有些... 为 here。 ProcessName是w3wp,对我来说没问题,但是我不能写日志。所以我尝试用 logName 参数重载构造函数,但没有成功。
如果我理解的很好,WriteLog
方法在某些情况下需要访问注册表(回答here)?好的,这需要更多的 dll 更新。很好的建议是在安装过程中写下提到的注册表更改。但是,我的更改是“仅”更新分布式 dll,而不是新安装。
MSDB 是卑鄙的,我找到了一些关于 EventLogPermissionAttribute
(here) and EventLogPermission
(here) 的东西,但它对我一点帮助都没有。我尝试使用它,但总是遇到相同的异常。没有例子。
我最后找到这个 (source):
EventLogPermission eventLogPermission = new EventLogPermission(EventLogPermissionAccess.Administer, ".");
eventLogPermission.PermitOnly();
if (!EventLog.SourceExists(source))
{
EventLog.CreateEventSource(source, "Application");
}
EventLog.WriteEntry(source, message, entryType);
但它以类似的异常结束。现在它说的很少:它无法访问“安全”协议。
所以,问题是:我应该如何写入 EventLog?或者确实需要更新注册表(我可以通过我们的更新工具来完成,但我不相信我想这样做)。
我还想了解 System.Diagnostics.EventLog
的工作原理以及它在后台执行的操作,以便更好地理解我的代码(如果它对我有用的话)。
您需要管理员权限才能创建自定义事件日志源,而 NETWORK SERVICE
没有该权限。您将需要更新安装程序以创建该日志源,然后安装程序必须 运行 作为管理员。
可能我只是误解了System.Diagnostics.EventLog
,但我无法以我的应用程序名称写入事件日志。项目是 ASP.NET 网络服务 (.NET Framework 4),在 NETWORK SERVICE 用户下工作。
我试过了并且有效(如here所述):
using (System.Diagnostics.EventLog eventLog = new System.Diagnostics.EventLog())
{
eventLog.Source = "Application";
eventLog.WriteEntry("MY LOG INFO", System.Diagnostics.EventLogEntryType.Information);
}
但 Application 不是我的应用程序的名称。所以我试着把eventLog.Source = "Application";
改成了eventLog.Source = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
。结果异常 未找到源,但有些... 为 here。 ProcessName是w3wp,对我来说没问题,但是我不能写日志。所以我尝试用 logName 参数重载构造函数,但没有成功。
如果我理解的很好,WriteLog
方法在某些情况下需要访问注册表(回答here)?好的,这需要更多的 dll 更新。很好的建议是在安装过程中写下提到的注册表更改。但是,我的更改是“仅”更新分布式 dll,而不是新安装。
MSDB 是卑鄙的,我找到了一些关于 EventLogPermissionAttribute
(here) and EventLogPermission
(here) 的东西,但它对我一点帮助都没有。我尝试使用它,但总是遇到相同的异常。没有例子。
我最后找到这个 (source):
EventLogPermission eventLogPermission = new EventLogPermission(EventLogPermissionAccess.Administer, ".");
eventLogPermission.PermitOnly();
if (!EventLog.SourceExists(source))
{
EventLog.CreateEventSource(source, "Application");
}
EventLog.WriteEntry(source, message, entryType);
但它以类似的异常结束。现在它说的很少:它无法访问“安全”协议。
所以,问题是:我应该如何写入 EventLog?或者确实需要更新注册表(我可以通过我们的更新工具来完成,但我不相信我想这样做)。
我还想了解 System.Diagnostics.EventLog
的工作原理以及它在后台执行的操作,以便更好地理解我的代码(如果它对我有用的话)。
您需要管理员权限才能创建自定义事件日志源,而 NETWORK SERVICE
没有该权限。您将需要更新安装程序以创建该日志源,然后安装程序必须 运行 作为管理员。