繁体   English   中英

我应该如何写入 EventLog

[英]How should I write to EventLog

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

我试过这个并且它有效(如此所述):

using (System.Diagnostics.EventLog eventLog = new System.Diagnostics.EventLog())
{
    eventLog.Source = "Application";
    eventLog.WriteEntry("MY LOG INFO", System.Diagnostics.EventLogEntryType.Information);
}

应用程序不是我的应用程序的名称。 所以我试图改变eventLog.Source = "Application"; 进入eventLog.Source = System.Diagnostics.Process.GetCurrentProcess().ProcessName; . Result is exception The source was not found, but some... as here ProcessName 是 w3wp,对我来说没问题,但我不能写日志。 所以我尝试使用 logName 参数重载构造函数,但没有成功。

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

MSDB 是卑鄙的,我找到了一些关于EventLogPermissionAttribute这里)和EventLogPermission这里)的东西,但它对我一点帮助都没有。 我尝试使用它,但总是遇到同样的异常。 没有例子。

最后我找到了这个( 来源):

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没有该权限。 您需要更新安装程序以创建该日志源,然后安装程序必须以管理员身份运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM